[英]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.