for循环加上for in循环

for loop plus for in loop

为什么这段代码不起作用?我正在尝试遍历对象集合并检测 属性 值是否与源匹配。如果 属性 值匹配,我想将它们推入数组。当我在 for in 循环中 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;
}

你只需要在第二个 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