繁体   English   中英

构建Javascript数组数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM