如何通过另一个数组中的元素 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】:

您可以通过使用filterfindIndex 数组原型来实现所需的结果。

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 从数组中删除元素? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套数组mongodb中删除元素

如何从js中的数组中删除元素[元素来自mongodb] [重复]

如何从js中的数组中删除元素[元素来自mongodb] [重复]

访问指针数组/通过另一个指针并删除数组中的单个元素而不删除第一个指针或整个数组

在JAVA中如何从数组中删除一个元素

Mongodb如何查询内嵌数组的指定元素?