【问题标题】:sum numeric values in a multidimentional array对多维数组中的数值求和
【发布时间】:2015-10-30 13:12:16
【问题描述】:

我在 Javascript 中有一个这样的数组:

var scores = [
    {"firstName":"John", "value": 89},
    {"firstName":"Peter", "value": 151},
    {"firstName":"Anna", "value": 200},
    {"firstName":"Peter", "value": 22},
    {"firstName":"Anna","value": 60}
];

我想转换这个数组,以便组合相似名字的值。我想要的结果是:

var scores = [
    {"firstName":"John", "value": 89},
    {"firstName":"Peter", "value": 173},
    {"firstName":"Anna", "value": 260}
];

问候,

【问题讨论】:

  • 你自己尝试过什么?

标签: javascript jquery json


【解决方案1】:

只是:

var scores = [{
  "firstName": "John",
  "value": 89
}, {
  "firstName": "Peter",
  "value": 151
}, {
  "firstName": "Anna",
  "value": 200
}, {
  "firstName": "Peter",
  "value": 22
}, {
  "firstName": "Anna",
  "value": 60
}];

var names = {};
var new_arr = [];

scores.forEach(function(entry) {
  if (names.hasOwnProperty(entry.firstName)) {
    new_arr[names[entry.firstName]].value += entry.value;
  } else {
    names[entry.firstName] = new_arr.length;
    new_arr.push({
      "firstName": entry.firstName,
      "value": entry.value
    });
  }
});

console.log(new_arr);

【讨论】:

  • 对我来说似乎很好。有人知道为什么这可能会被否决吗?
  • 你可以留下你的评论,让我知道如何改进谁反对它的代码。
  • iplus26 发布的解决方案就像一个魅力。非常感谢!
【解决方案2】:

这是一个两步解决方案。首先计算所有项目。其次,将结果格式化为想要的样式。

var scores = [
    { "firstName": "John", "value": 89 },
    { "firstName": "Peter", "value": 151 },
    { "firstName": "Anna", "value": 200 },
    { "firstName": "Peter", "value": 22 },
    { "firstName": "Anna", "value": 60 }
];
var result = [],
    r0 = scores.reduce(function (r, a) {
        r[a.firstName] = (r[a.firstName] || 0) + a.value;
        return r;
    }, {}), // { "John": 89, "Peter": 173, "Anna": 260 }
    i;
for (i in r0) {
    result.push({ firstName: i, value: r0[i] });
}
document.getElementById('out').innerHTML = JSON.stringify(result, null, 4);
<pre id="out"></pre>

【讨论】:

    【解决方案3】:
    var result = [],
        names = [],
        index;
    
    var scores = [
       {"firstName":"John", "value": 89},
       {"firstName":"Peter", "value": 151},
       {"firstName":"Anna", "value": 200},
       {"firstName":"Peter", "value": 22},
       {"firstName":"Anna","value": 60}
    ];
    
    scores.forEach(function (score) {
      index = names.indexOf(score.firstName);
    
      if (index === -1) {
         index = names.push(score.firstName) - 1;
         result.push({firstName: score.firstName, value: 0});
      }
    
      result[index].value += score.value;
    });
    
    console.log(result);
    

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多