2016-06-23 49 views
1

我有數據,看起來像這樣:提取散列陣列的幾個陣列,縮短代碼

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

在轉化結束時,我想有4個陣列包含數據字段:

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

我做這樣的:

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] 
}