[英]How can I add a count property to objects with similar id in array
我有这个由多个对象组成的数组,并且根据数量,我设法根据数量将具有相似 id 的对象相乘,从而为拣货应用程序制作产品轮播:
我不知道该怎么做,也许运行一个 for 循环。 我正在使用 reduce 来展平阵列。
const flattenedOrderProducts = await orderProductsArr.reduce((acc, item) => {
return [
...acc,
...Array.from({ length: item.quantity }, () => ({...item})),
]
}, [])
[
{
"orderid": "28318",
"id": 4040,
"name": "Soap",
"quantity": 2
},
{
"orderid": "28318",
"id": 4040,
"name": "Soap",
"quantity": 2
},
{
"orderid": "28318",
"id": 7313,
"name": "Olive Oil",
"quantity": 1
},
{
"orderid": "28318",
"id": 5670,
"name": "Tomato 1kg",
"quantity": 2
},
{
"orderid": "28318",
"id": 5670,
"name": "Tomato 1kg",
"quantity": 2
}
我想要的是一个计数器——让拣货员查看还有多少要拣货。
[
{
"orderid": "28318",
"id": 4040,
"name": "Soap",
"quantity": 2,
"itemsLeft": 2
},
{
"orderid": "28318",
"id": 4040,
"name": "Soap",
"quantity": 2,
"itemsLeft": 1
},
{
"orderid": "28318",
"id": 7313,
"name": "Olive Oil",
"quantity": 1,
"itemsLeft": 1
},
{
"orderid": "28318",
"id": 5670,
"name": "Tomato 1kg",
"quantity": 3,
"itemsLeft": 3
},
{
"orderid": "28318",
"id": 5670,
"name": "Tomato 1kg",
"quantity": 3,
"itemsLeft": 2
},
{
"orderid": "28318",
"id": 5670,
"name": "Tomato 1kg",
"quantity": 3,
"itemsLeft": 1
}
正如@Heretic Monkey 建议的那样,您确实可以使用 array.from 方法中的第二个参数。 因此,只需对您的示例进行非常小的调整,您就会得到以下代码,(我相信)正是您想要的。
const flattenedOrderProducts = await orderProductsArr.reduce((acc, item) => {
return [
...acc,
...Array.from({ length: item.quantity }, (_, i) => ({...item, itemsLeft: i + 1})),
]
}, [])
我可以建议一些改变。 首先你真的需要等待吗? reduce 是一个同步 function。 其次,通过使用扩展运算符填充数组,您实际上将数组的全部内容复制到一个新数组并返回它。 我建议将您的 function 实现为类似
const flattenedOrderProducts = orderProductsArr.reduce((acc, item) => {
for (let itemsLeft = 1; itemsLeft <= item.quantity; itemsLeft ++) {
acc.push({ ...item, itemsLeft });
}
return acc;
}, [])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.