根据其中一个属性创建JavaScript对象数组的子集?

时间:2011-02-04 03:00:33

标签: javascript arrays object

我有一个具有相同属性的JavaScript对象数组,如下所示:

box[0] = { name: 'somename', /* more properties... */ };
box[1] = { name: 'othername', /* more properties... */ };
box[2] = { name: 'onemorename', /* more properties... */ };
// more objects in the array...

我希望对此数组进行子集化,使其仅包含与“list”名称匹配的对象,并将那些不匹配的对象复制到另一个名为cache的数组中。我想也许我可以将这个对象数组与另一个数组进行比较,该数组只包含一个具有所需名称的字符串列表,并根据此列表检查每个对象的name属性,以创建一个匹配的数组。我不知道这是否有用,或者它是否是达到我想要的最佳方法,这就是我要求你帮助的原因。也许用100个名字检查每个200-500个对象并不是一件好事,我真的不知道。

您对我如何做到这一点有什么想法吗?更好的是,你能指点我一个例子吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

假设您想要的名称列表存储在数组中,

var wantedNames = [ "first name", "second name", .. ];

有两个数组 - 匹配名称的数组和不匹配的数组。循环遍历框对象中的每个项目,如果它包含列表中的名称,则将其包括在内。

var objectsMatchingName = box.filter(function(item) {
    return wantedNames.indexOf(item.name) !== -1;
});

var cache = box.filter(function(item) {
    return objectsMatchingName.indexOf(item) === -1;
});

我希望某种类型的数组差异操作,所以你可以做(​​在伪代码中):

var cache = box - objectsMatchingName