javascript - 在数组 javascript (ES5) 中添加相似对象的数量

标签 javascript arrays loops object ecmascript-5

<分区>

我有一个这样的数组:

var  data = [
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5}
];

我希望结果是相同 catNumber 的所有数量的总和。

var  data = [
    { catNumber: 'EK-21200', quantity: 15},
    { catNumber: 'EK-00341', quantity: 10}
];

最佳答案

你可以使用这个 ES6 代码:

var  data = [
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5}
];

data = Array.from(data.reduce( (acc, {catNumber, quantity}) => 
    acc.set(catNumber, (acc.get(catNumber) || 0) + quantity),
    new Map()
), ([catNumber, quantity]) => ({catNumber, quantity}) );

console.log(data);

或者,在 ES5 版本中:

var  data = [
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5}
];

var acc = data.reduce( function(acc, obj) {
    acc[obj.catNumber] = (acc[obj.catNumber] || 0) + obj.quantity;
    return acc;
}, {});
data = Object.keys(acc).map(function(key) {
    return { catNumber: key, quantity: acc[key] };
});

console.log(data);

最后,这是一个不使用 Array 迭代方法的版本,例如 reducemap,而是使用 for 循环:

var  data = [
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-21200', quantity: 5},
    { catNumber: 'EK-00341', quantity: 5}
];

var acc = {};
for (var i = 0; i < data.length; i++) {
    var obj = data[i];
    if (!acc[obj.catNumber]) acc[obj.catNumber] = 0;
    acc[obj.catNumber] += obj.quantity;
}
data = [];
for (var key in acc) {
    data.push({ catNumber: key, quantity: acc[key] });
}

console.log(data);

关于javascript - 在数组 javascript (ES5) 中添加相似对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41075430/

相关文章:

python - 假设一个数组只包含两种元素,如何快速找到它们的边界?

c++ - std::list 中每种特定类型的对象数

javascript - 如何将 Google Firestore 中的数据提取到我的 Vue 实例中?

c# - 将 1d 数组索引转换为 3d 数组索引?

如果数据包含某些 URL,Javascript 无法解析 JSON

java - 将行添加到 JTable 时出错

ios - 快速循环数组

python - 循环内独立随机洗牌

javascript - 根据窗口滚动更改 div 顶部边距

javascript - 提取内部数组和对象数组