循环通过对象数组

时间:2015-07-25 04:49:16

标签: javascript arrays object

嘿伙计们,所以我试图在这里解决这个问题

  

创建一个查看列表(第一个参数)并返回的函数   具有等效属性值的所有对象的数组(第二个   参数)。

但如果我的生活依赖于它,我似乎无法通过一系列对象循环.....这是我的以下代码

function where(collection, source) {
  for(var prop in collection){
    if(collection.hasOwnProperty(prop)){
      console.log("collection." + prop + "=" + collection[prop]);
    }
  }
}

where([{ first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { first: 'Tybalt', last: 'Capulet' }], { last: 'Capulet' });

我正在阅读有关hasOwnProperty方法和for循环的文档,但似乎我正在使用它们错误,任何指导都表示赞赏,谢谢。

这不是重复

2 个答案:

答案 0 :(得分:1)

The for...in loop is not what you want for iterating over arrays in javascript

使用sequential for循环遍历数组,并使用for..in循环迭代对象的键...

for(var i=0; i<collections.length; i+=1) {
  for(var prop in collections[i]){
    if(collections[i].hasOwnProperty(prop)){
      console.log("collection." + prop + "=" + collections[i][prop]);
    }
  }
}

答案 1 :(得分:1)

可以使用filter方法过滤掉满足条件的元素。此外,由于在评估条件时需要比较对象,并且JavaScript for Objects中似乎没有equals方法,因此必须执行额外的工作来检查相等性。

这是解决问题的一种方法可以解决

function where(collection, source) {
  return collection.filter(function(item) { 
     return Object.keys(source).every(function(k){ return item[k] == source[k] });
  });
}

console.log (where([{ first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { first: 'Tybalt', last: 'Capulet' }], { last: 'Capulet'}));

<强>输出

[ { first: 'Tybalt', last: 'Capulet' } ]