javascript / nativescript-按ID删除重复项,但更新其他属性

时间:2019-07-17 17:16:32

标签: javascript nativescript javascript-objects

我有一个对象数组,所以可以说在某些时候我有这个对象:

{
    {
        "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保持在一起。

我的问题是,我该如何删除重复项,但用最后一个更新财产分界线?

感谢您的时间,问候

1 个答案:

答案 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;
    }
}, []);