我有一个对象数组,所以可以说在某些时候我有这个对象:
{
{
"subTitulo": "Salmon",
"mainImage": "/img/thumbt49eEUtB1zgFj41L.png",
"preco": "11",
"id": 22,
"quantidade": 2
},
{
"subTitulo": "Salmon",
"mainImage": "/img/thumbt50eEltB1zgFj41i.png",
"preco": "11",
"id": 22,
"quantidade": 4
}
}
这是一个外卖应用程序,上面的数组是当用户处于该应用程序的最终视图中时,我可以使用以下命令删除重复项:
const filteredArr = gotData.ordersFinal.reduce((acc, current) => {
const x = acc.find(item => item.id === current.id);
if (!x) {
return acc.concat([current]);
} else {
return acc;
}
}, []);
当用户首先进入最终视图并且有重复项时,一切工作正常,但假设用户返回并需要更改数量(量化),然后再次进入最终视图,则说明正在发生该属性equiidade未更新,我理解为什么,因为它是id的重复项,所以与已经拥有的id保持在一起。
我的问题是,我该如何删除重复项,但用最后一个更新财产分界线?
感谢您的时间,问候
答案 0 :(得分:1)
您可以为添加到购物清单的每个元素添加时间戳,例如
item.timeAdded = new Date().valueOf();
,然后在最终视图中,您可以在此时检查项目已添加并使用数量的最新值作为更新的数量。例如;
const filteredArr = gotData.ordersFinal.reduce((acc, current) => {
const x = acc.find(item => item.id === current.id);
if (!x) {
return acc.concat([current]);
} else {
if(current.timeAdded > x.timeAdded) // this was added later
x.quantidade = current.quantidade // update the quantity
let index = acc.findIndex(item => item.id === current.id)
acc[index] = x // update the accumulator
return acc;
}
}, []);