在数组中按键合并相似的对象
Merge similar objects by key in array
我想合并相似的对象并合并数量。
我的阵列:
result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
]
我做了什么:
result = result.reduce((sum, val) => {
for (let i in sum) {
if (sum[i].itemNumber === val.itemNumber) {
return sum
}
}
sum.push(val);
return sum;
}, []);
我的预期结果:
result = [
{itemNumber:'1288',quantity:1000},
{itemNumber:'3298',quantity:1000},
]
如果有一种方法可以用 lodash 做到这一点,我想知道,因为我找不到。
感谢您的帮助。
您可以将总计存储在对象中并将它们转换回数组。但是,在这种方法中,您应该注意到元素的顺序可能会改变。
const input = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
];
// stores itemNumber, totalQuantity pairs.
// Example: {'1288': 1000, '3298': 1000}
const totals = input.reduce((acc, val) => {
const key = val.itemNumber;
const { quantity } = val;
const totalSoFar = acc[key] || 0;
return {...acc, [key]: totalSoFar + quantity};
}, {});
const result = Object.entries(totals)
.map(([itemNumber, quantity]) => ({itemNumber, quantity}));
console.log(result);
你可以试试这个,跟你的代码差不多
result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
];
let rt = Object.values(result.reduce((acc, v) => {
if (!acc[v.itemNumber]) {
acc[v.itemNumber] = {id: v.itemNumber, quantity: 0};
}
acc[v.itemNumber].quantity += v.quantity;
return acc;
}, {}));
console.log(rt);
我想合并相似的对象并合并数量。
我的阵列:
result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
]
我做了什么:
result = result.reduce((sum, val) => {
for (let i in sum) {
if (sum[i].itemNumber === val.itemNumber) {
return sum
}
}
sum.push(val);
return sum;
}, []);
我的预期结果:
result = [
{itemNumber:'1288',quantity:1000},
{itemNumber:'3298',quantity:1000},
]
如果有一种方法可以用 lodash 做到这一点,我想知道,因为我找不到。
感谢您的帮助。
您可以将总计存储在对象中并将它们转换回数组。但是,在这种方法中,您应该注意到元素的顺序可能会改变。
const input = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
];
// stores itemNumber, totalQuantity pairs.
// Example: {'1288': 1000, '3298': 1000}
const totals = input.reduce((acc, val) => {
const key = val.itemNumber;
const { quantity } = val;
const totalSoFar = acc[key] || 0;
return {...acc, [key]: totalSoFar + quantity};
}, {});
const result = Object.entries(totals)
.map(([itemNumber, quantity]) => ({itemNumber, quantity}));
console.log(result);
你可以试试这个,跟你的代码差不多
result = [
{itemNumber:'1288',quantity:700},
{itemNumber:'3298',quantity:1000},
{itemNumber:'1288',quantity:300}
];
let rt = Object.values(result.reduce((acc, v) => {
if (!acc[v.itemNumber]) {
acc[v.itemNumber] = {id: v.itemNumber, quantity: 0};
}
acc[v.itemNumber].quantity += v.quantity;
return acc;
}, {}));
console.log(rt);