获取具有特定属性的相同值的对象列表

时间:2015-01-19 06:21:11

标签: javascript

我有一堆具有.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的对象的列表。

是否有任何内置方法可以执行,或者我是否必须单独迭代每个方法并将匹配的内容推送到新阵列?

5 个答案:

答案 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所述,过滤器在内部迭代数组。如果从算法的角度考虑,则必须迭代数据以过滤掉某些内容。