2016-06-23 21 views
1

私はデータを持っている:抽出ハッシュ配列、短縮コード

var labels = ["uno", "dos"]; 
var men = [3, 4]; 
var kids = [2, 2]; 
var womens = [5, 2]; 

[{label: "uno", men: 3, kids: 2, womens: 5}, {label: "dos", men: 4, kids: 2, womens: 2}] 

変換の終わりに、私は希望は、データフィールドを含む4つの配列を有すること

私はそのようにそれをやっている:

var label = []; 
var men = []; 
var kids = []; 
var women = []; 

dataArray.forEach(function(data){ 
    label.push(data.label); 
    men.push(data.men); 
    kids.push(data.kids); 
    women.push(data.women); 
}); 

は、同じデータ変換を達成するためのよりよい/短い方法はありますか?どうもありがとう!

+1

あなたのコードのような結果が得られますが、非常に最適です – Satpal

+0

参考までに、JSではすべてのオブジェクトがハッシュです。ハッシュではなく配列と呼んでください。 – evolutionxbox

答えて

2

目的のオブジェクトを使用して収集し、後で必要な変数にプロパティを割り当てることができます。

この提案は、配列のすべての要素とすべてのプロパティにわたって繰り返し、結果オブジェクトにキーがない場合は新しい配列を作成します。次に、値を配列に追加します。

var data = [{ label: "uno", men: 3, kids: 2, womens: 5 }, { label: "dos", men: 4, kids: 2, womens: 2 }], 
 
    result = {}; 
 

 
data.forEach(function (o) { 
 
    Object.keys(o).forEach(function (k) { 
 
     result[k] = result[k] || []; 
 
     result[k].push(o[k]); 
 
    }); 
 
}); 
 

 
console.log(result);

+1

短いですか?そうでないかもしれない。より良い/より一般的な?はい、はい。 – evolutionxbox

0

あなたは

var arr = [{label: "uno", men: 3, kids: 2, womens: 5}, {label: "dos", men: 4, kids: 2, womens: 2}]; 

var outputData = {}; 

for(var i in arr) { 
    var element = arr[i]; 
    for(var key in element) { 
    if(outputData.hasOwnProperty(key)) { 
     outputData[key].push(element[key]); 
    } 
    else { 
     outputData[key] = [element[key]]; 
    } 
    } 
} 
console.log(outputData); 

のような一般的な方法でそれを行うことができますし、そのためにあなたが

{ 
    kids: [2, 2], 
    label: ["uno", "dos"], 
    men: [3, 4], 
    womens: [5, 2] 
}