javascript 算法与数据结构 中级算法 找出包含特定键值对的对象

我的代码

function whatIsInAName(collection, source) {
  const arr = [];
  // 只修改这一行下面的代码
  for(let i=0; i< collection.length; i++) {
      let flag = true;
      for( key in source) {
        if (source[key]  !== collection[i][key]) {
           flag = false;
        }
      }
      if(flag) {
          arr.push(collection[i])
      }
  }   
 
  // 只修改这一行上面的代码
  return arr;
}

报 key is not defined

在我电脑上跑 跟预期的结果一样的
运行环境 nodejs 17.0.1 window 10

我改写成这样就通过了

function whatIsInAName(collection, source) {
  const arr = [];
  // 只修改这一行下面的代码
  const  srcKey = Object.keys(source);

  return  collection.filter(obj => {
     return srcKey.every( key=> {
         return  obj[key] === source[key]
     })
   })
 
  // 只修改这一行上面的代码
  return arr;
}

我在 key 前面 少写了 const 或者 let

function whatIsInAName(collection, source) {
  const arr = [];
  // 只修改这一行下面的代码
    for(let i=0; i< collection.length; i++) {
      let flag = true;
      for(const key in source) {
        if (source[key]  !== collection[i][key]) {
           flag = false;
        }
      }
      if(flag) {
          arr.push(collection[i])
      }
  }   
   // 只修改这一行上面的代码
  return arr;
}