Dal*_*bor 20 javascript arrays performance
我有一个对象数组(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);Run Code Online (Sandbox Code Playgroud)
Cer*_*nce 35
转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);Run Code Online (Sandbox Code Playgroud)
请注意,Array.prototype.includesand Array.prototype.indexOf操作O(N)不是O(1),因此,如果您使用它们代替a Set,则它们可能会花费更长的时间。