如何通过另一个数组中的元素 id 从数组中删除元素? [关闭]
Posted
技术标签:
【中文标题】如何通过另一个数组中的元素 id 从数组中删除元素? [关闭]【英文标题】:How to remove elements from an array by element id that is in another array? [closed] 【发布时间】:2020-07-20 00:31:03 【问题描述】:例子
const arr1 = [id:1,name:'qwerty',id:2,name:'qwerty']
const arr2 = [id:1,name:'qwerty',id:2,name:'qwerty',id:3,name:'qwerty',id:4,name:'qwerty']
我需要从 arr2 中的 arr1 中删除所有按 id 的元素
结果
const arr2 = [id:3,name:'qwerty',id:4,name:'qwerty']
【问题讨论】:
你有什么尝试吗? Convert array of objects into array of properties(site:***.com js array of objects to array of ids
的第一个 Google 结果)和remove object from js array knowing its Id(site:***.com js remove array elements by id
的第一个 Google 结果)。然后使用Array
方法。
这能回答你的问题吗? remove object from js array knowing it's Id
【参考方案1】:
您可以从arr1
中获取Set
与所有id
并过滤arr2
。
这种方法
result = arr2.filter(
(ids => ( id ) => !ids.has(id))
(arr1.reduce((s, id ) => s.add(id), new Set))
);
在 Set
的实例上使用带有 IIFE (immediately-invoked function expression) 的闭包
arr1.reduce((s, id ) => s.add(id), new Set)
这是ids
的值
(ids => callback)(instanceOfSet)
回调仅包含id
的解构和Set#has
的检查
( id ) => !ids.has(id)
const
arr1 = [ id: 1, name: 'qwerty' , id: 2, name: 'qwerty' ],
arr2 = [ id: 1, name: 'qwerty' , id: 2, name: 'qwerty' , id: 3, name: 'qwerty' , id: 4, name: 'qwerty' ],
result = arr2.filter(
(ids => ( id ) => !ids.has(id))
(arr1.reduce((s, id ) => s.add(id), new Set))
);
console.log(result);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
哇!超级答案!:) Nina 你能解释一下ids
是如何工作的吗?为什么这一行一开始就有效(arr1.reduce((s, id ) => s.add(id), new Set)
?然后才执行这一行(ids => ( id ) => !ids.has(id))
?提前致谢!:)
@StepUp,请参阅编辑。
谢谢!真是太棒了!太好了!:)【参考方案2】:
您可以通过使用filter
和findIndex
数组原型来实现所需的结果。
const arr1 = [id:1,name:'qwerty',id:2,name:'qwerty'];
const arr2 = [id:1,name:'qwerty',id:2,name:'qwerty',id:3,name:'qwerty',id:4,name:'qwerty'];
const res = arr2.filter(value => arr1.findIndex(x => x.id === value.id) === -1);
console.log(res);
更新
使用find
代替findIndex
可以获得相同的结果。
const arr1 = [id:1,name:'qwerty',id:2,name:'qwerty'];
const arr2 = [id:1,name:'qwerty',id:2,name:'qwerty',id:3,name:'qwerty',id:4,name:'qwerty'];
const res = arr2.filter(value => !arr1.find(x => x.id === value.id));
console.log(res);
【讨论】:
以上是关于如何通过另一个数组中的元素 id 从数组中删除元素? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何从js中的数组中删除元素[元素来自mongodb] [重复]
如何从js中的数组中删除元素[元素来自mongodb] [重复]