我有这个数组对象
[
{
package_size: 12,
qty: 24
},
{
package_size: 24,
qty: 60
}
]
我正在尝试做的事情:
如果我在此数组中添加了另一个对象,并且它的值与任何package_size
相等,例如,如果我想添加 package_size:12 && qty:50 ,则第一个元素数组中的内容变为:
[
{
package_size: 12,
qty: 74
},
{
package_size: 24,
qty: 60
}
]
答案 0 :(得分:0)
您可以实现将数组变成字典并使用化简器的目的
let items = [
{
package_size: 12,
qty: 24
},
{
package_size: 24,
qty: 60
},
{
package_size: 12,
qty: 50
},
];
// Transform the array into a dictionnary
items = items.reduce((acc, item) => {
const key = item.package_size;
acc[key] = acc[key] || 0;
acc[key] += item.qty;
return acc;
}, Object.create(null));
// Transform dictionnary into an array
const mergedItems = [];
Object.keys(items).forEach((key) => {
mergedItems.push({
package_size: key,
qty: items[key]
});
});
console.log(mergedItems);
答案 1 :(得分:0)
在评论中已经提到.find
是您的朋友。您可以使用自定义添加功能将新项目添加到数组。
let items = [
{
package_size: 12,
qty: 24
},
{
package_size: 24,
qty: 60
}
];
let addItem = (item) => {
let slot = items.find(e => e.package_size == item.package_size);
if (slot) {
slot.qty += item.qty;
} else {
items.push(item);
}
};
addItem({package_size: 12, qty: 10});
console.log(items);
addItem({package_size: 13, qty: 1});
console.log(items);