过滤对象数组的高效方法
Performant way to filtering an array of objects
这是过滤掉数组中所有现有对象的好方法吗?
var arrayOfObjects = [
{ id: 1, text: 'obj1'},
{ id: 2, text: 'obj2'},
{ id: 3, text: 'obj3'}
],
ids = [ 1, 3 ],
filteredArray = [];
for (var x = 0, len = arrayOfObjects.length; x < len; x++) {
for (var i = 0, ilen = ids.length; i < len; i++) {
if (arrayOfObjects[x].id === ids[i]) {
arrayOfObjects[x] = null;
break;
}
}
}
filteredArray = _.filter(obj, function(o) { return !!(o); });
更新:这样做的目的是从 arrayOfObjects 中过滤出与 ids 数组中的 id 匹配的对象。所以上面的代码有效(filteredArray is [{ id: 2, text: 'obj2'}],但是有没有更好的方法来完成这个?
是的,有更好的方法:
var array = [
{ id: 1, text: "obj1" },
{ id: 2, text: "obj2" },
{ id: 3, text: "obj3" }
];
var ids = [1, 3];
var idsIndex = toIndex(ids);
var result = array.filter(function (obj) {
return !idsIndex.hasOwnProperty(obj.id);
});
alert(JSON.stringify(result, null, 4));
function toIndex(array) {
var length = array.length;
var result = {};
var index = 0;
while (index < length)
result[array[index++]] = true;
return result;
}
toIndex
函数的文档在以下答案中(请注意它被称为 index_of_array
):
这是过滤掉数组中所有现有对象的好方法吗?
var arrayOfObjects = [
{ id: 1, text: 'obj1'},
{ id: 2, text: 'obj2'},
{ id: 3, text: 'obj3'}
],
ids = [ 1, 3 ],
filteredArray = [];
for (var x = 0, len = arrayOfObjects.length; x < len; x++) {
for (var i = 0, ilen = ids.length; i < len; i++) {
if (arrayOfObjects[x].id === ids[i]) {
arrayOfObjects[x] = null;
break;
}
}
}
filteredArray = _.filter(obj, function(o) { return !!(o); });
更新:这样做的目的是从 arrayOfObjects 中过滤出与 ids 数组中的 id 匹配的对象。所以上面的代码有效(filteredArray is [{ id: 2, text: 'obj2'}],但是有没有更好的方法来完成这个?
是的,有更好的方法:
var array = [
{ id: 1, text: "obj1" },
{ id: 2, text: "obj2" },
{ id: 3, text: "obj3" }
];
var ids = [1, 3];
var idsIndex = toIndex(ids);
var result = array.filter(function (obj) {
return !idsIndex.hasOwnProperty(obj.id);
});
alert(JSON.stringify(result, null, 4));
function toIndex(array) {
var length = array.length;
var result = {};
var index = 0;
while (index < length)
result[array[index++]] = true;
return result;
}
toIndex
函数的文档在以下答案中(请注意它被称为 index_of_array
):