我有一堆具有.type
属性的对象。
所有对象都在这样的数组中:
var arr = [];
arr[0] = {'type':1,'x':56,'y':2};
arr[1] = {'type':2,'x':1, 'y':23};
arr[2] = {'type':1,'x':23,'y':63};
我想要做的是返回所有具有type == 1
的对象的列表。
是否有任何内置方法可以执行,或者我是否必须单独迭代每个方法并将匹配的内容推送到新阵列?
答案 0 :(得分:1)
在js 1.6中你可以像这样使用过滤函数:
var result = arr.filter(function(o){return o.type == 1})
...而不是在for循环中创建并推送到新数组 从技术上讲,它们都做同样的事情,但过滤器是优雅的,因为它抽象丑陋
答案 1 :(得分:1)
如果需要关注数组中所有n
元素的迭代,那么您可以将数据结构构建为object
而不是array
:
var multimap = {};
multimap[1] = [{'type':1,'x':56,'y':2},{'type':1,'x':23,'y':63}];
multimap[2] = [{'type':2,'x':1, 'y':23}];
您可以在order of 1
中检索特定类型的元素,例如:
multimap[1]
会为您提供1
类型的元素。
将特定type
的新元素插入arr
结构中:
if(!multimap[type]){
multimap[type] = [];
}
multimap[type].push(element);
答案 2 :(得分:0)
使用数组的.filter
函数:
var arr = [{
'type': 1,
'x': 56,
'y': 2
}, {
'type': 2,
'x': 1,
'y': 23
}, {
'type': 1,
'x': 23,
'y': 63
}];
var filtered = arr.filter(function(obj) {
return obj.type === 1;
})
答案 3 :(得分:0)
for(i=0;i = arr.length;i++){
if (arr[i].hasOwnProperty('type')) {
alert('have key!');
}
}
使用此功能,您可以搜索任何属性type
。如果将属性名称作为参数传递
答案 4 :(得分:0)
您可以使用Javascript中的.filter()
函数来实现此目的。
工作代码段:
var arr = [];
arr[0] = {'type':1,'x':56,'y':2};
arr[1] = {'type':2,'x':1, 'y':23};
arr[2] = {'type':1,'x':23,'y':63};
var filteredArr = arr.filter(function(obj) {
return obj.type === 1; // filter the objects with type 1
});
console.dir(filteredArr); // check your console
电文读出:
.filter()
| MDN
修改强>
如@ c.P.u1所述,过滤器在内部迭代数组。如果从算法的角度考虑,则必须迭代数据以过滤掉某些内容。