gpt4 book ai didi

javascript - 根据该对象的某些属性的数组从数组中删除对象

转载 作者:行者123 更新时间:2023-12-03 03:40:15 26 4
gpt4 key购买 nike

我有一个对象数组 (objList),每个对象都有“id”属性。

我有一个字符串数组 (idsToRemove),表示要从 objList 中删除的对象的 ID。

我找到了一些解决方案,但我担心它很慢,特别是对于具有大量属性的大量对象。有没有更有效的方法来做到这一点?

var idsToRemove = ["3", "1"];
var objList = [{
id: "1",
name: "aaa"
},
{
id: "2",
name: "bbb"
},
{
id: "3",
name: "ccc"
}
];

for (var i = 0, len = idsToRemove.length; i < len; i++) {
objList = objList.filter(o => o.id != idsToRemove[i]);
}

console.log(objList);

最佳答案

idsToRemove 转换为 Set,以便您可以使用 Set.prototype.has(O(1) 操作),并且 .filter objList 只需一次,因此整体复杂度为 O(n) (并且您只需迭代超过可能巨大的 objList 一次):

var idsToRemove = ["3", "1"];
var objList = [{
id: "1",
name: "aaa"
},
{
id: "2",
name: "bbb"
},
{
id: "3",
name: "ccc"
}
];

const set = new Set(idsToRemove);
const filtered = objList.filter(({ id }) => !set.has(id));
console.log(filtered);

请注意,Array.prototype.includesArray.prototype.indexOf操作是O(N),而不是O( 1),因此如果您使用它们而不是 Set,它们可能需要更长的时间。

关于javascript - 根据该对象的某些属性的数组从数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com