for loop plus for in循环

时间:2015-06-30 08:21:06

标签: javascript arrays matching javascript-objects

为什么这段代码不起作用?我尝试遍历对象集合并检测属性值是否与源匹配。如果属性值匹配,我想将它们推入数组。当我在for循环中使用console.log时,我未定义,并且所有内容似乎都被推入了数组。这是代码:

function where(collection, source) {
  var arr = [];
  // What's in a name?
  for(var i =0; i < collection.length; i++){    
    for(var key in collection){
      if (collection[i][key] === source[key]) {
        arr.push(collection[i]);
      }
    }
  }    
}

  return arr;
}

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

我的想法是这应该可行,但我不确定代码出了什么问题。我该如何修复代码?

当我尝试测试是否可以记录值时,如果未定义,则不确定原因:

function where(collection, source) {
  var arr = [];
  // What's in a name?
  for(var i =0; i < collection.length; i++){

    for(var key in collection){
          console.log("collection[i][key]:",collection[i][key]);
          console.log("source[key]:", source[key]);



  }

  }

  return arr;
}

1 个答案:

答案 0 :(得分:2)

你只需要在第二个for循环中添加[i](

for(集合中的var键 [i]

function where(collection, source) {
  var arr = [];
  // What's in a name?
  for(var i =0; i < collection.length; i++){

    for(var key in collection[i]){
      if(collection[i][key] === source[key])
        {
          arr.push(collection[i]);
        }
  }

  }

  return