[英]Structuring Javascript Array Data
希望我能在這里得到一些幫助。
我有一個看起來像這樣的javascript數組:
var stages = ['Stage 1', 'Stage 1', 'Stage 2', 'Stage 3', 'Stage 1'];
var stageValues = [10, 20, 10, 30, 50];
我想要實現的是獲取上述數據並將其轉換為如下形式:
Stage 1: 10, 20, 50
Stage 2: 10
Stage 3: 30
有點困惑如何做到這一點...任何想法,將不勝感激。
謝謝。
這是一個可能的解決方案。 該函數返回一個對象鍵/值,其中每個鍵是第一個數組的元素,而值是由第二個數組的相應元素組成的數組。
function joint_arrays(arr1,arr2) {
toR = {};
if (arr1.length===arr2.length){
for (var i=0;i<arr1.length;i++) {
if (arr1[i] in toR) {
toR[arr1[i]].push(arr2[i]);
}
else {
toR[arr1[i]] = [arr2[i]];
}
}
}
return toR;
}
例如:
var res= joint_arrays(stages,stageValues);
console.log(res);
退貨
[object Object] {
Stage 1: [10, 20, 50],
Stage 2: [10],
Stage 3: [30]
}
您可以遍歷兩個數組並將其分組。 但是,使用下划線或lodash之類的某些庫的功能性方法會更加容易
var stages = ['Stage 1', 'Stage 1', 'Stage 2', 'Stage 3', 'Stage 1'];
var stageValues = [10, 20, 10, 30, 50];
var grouped = _.groupBy(stageValues, function (elem, index) {
return stages[index];
});
使用Array.prototype.reduce
的解決方案:
var stages = ['Stage 1', 'Stage 1', 'Stage 2', 'Stage 3', 'Stage 1'], stageValues = [10, 20, 10, 30, 50], obj = stages.reduce(function (r, a, i) { r[a] = r[a] || []; i in stageValues && r[a].push(stageValues[i]); return r; }, {}); document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.