簡體   English   中英

使用 Map object 將項目添加到不重復的數組中

[英]Add items to an array without duplicates with using Map object

我正在嘗試將新值添加到沒有重復的數組中。

我正在使用 Map object 來保存以前的數組並嘗試過濾新數組

const [items, setItems] = useState([]);

    const res = () => {
        const map1 = new Map(
            arr.map(obj => {
                return [obj.id, obj];
            })
        );

        setItems([map1, ...data.result.filter(x => x.id !== map1.forEach((val, key) => key))]);
    };

如何成功完成本次迭代? 在這種情況下,還有其他使用 Map object 的方法會更好嗎?

如何成功完成本次迭代?

要測試 map 成員資格,您不應迭代map。 map 的優點是您可以使用has檢查成員資格。 此外,您不應將 map 作為新數組的第一個元素,而應傳播原始arr (或映射的值):

setItems([...arr, ...data.result.filter(x => !map1.has(x.id)]);

在這種情況下,還有其他使用 Map object 的方法會更好嗎?

您可以先將新數據加入數組,然后通過 Map 從中提取唯一值:

const res = () => {
    const map1 = new Map(
        data.result.concat(arr).map(obj => {
            return [obj.id, obj];
        })
    );

    setItems([...map1.values()]);
};

請注意, data.result放在arr前面,以確保存在重復時現有值具有優先權。 如果您希望新值需要覆蓋相同id的先前值,則反轉該順序。 如果您希望保留舊值,並且希望真正的新元素出現在數組的末尾,請執行以下操作:

        arr.concat(data.result, arr).map(obj => {
            // ...etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM