搜索匹配属性和等效 属性 值

Search for Matching Properties and Equivalent Property Values

我正在为 freecodecamp 做一个任务,发现自己被困住了。任务是:

"创建一个函数,它查看列表(第一个参数)和 returns 具有等效 属性 值的所有对象的数组(第二个参数)。

以下是一些有用的主题:

全局对象

Object.hasOwnProperty()

Object.keys()"

这是我目前所拥有的。我希望得到一些指导和解释,而不仅仅是要复制和粘贴的完全不同的代码。希望学习和成长。非常感谢。

function where(collection, source) {
  var arr = [];

  var sourceProp = Object.keys(source)[1];

  for (i = 0; i<collection.length; i++){
    if (collection[i].hasOwnProperty(sourceProp) && collection.sourceProp == source.sourceProp){
       arr.push(collection[i]);
    }
  }
  return arr;
}

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

您的代码中有一些拼写错误。请参阅下面的评论:

[a] Object.keys() returns 你是 属性 键的数组。要获取第一个也是唯一一个密钥,您应该使用 [0],而不是 [1]。

[b] 在您的 if 语句条件中,您必须通过 collection[i][sourceProp] 引用第 i 个元素的值,其中 sourceProp是您从步骤 [a] 中获取的密钥。请参阅我的答案底部的 "why"。

[c] 要获取 source 参数的值,您可以使用 source[sourceProp] 访问它。

function where(collection, source) {
  var arr = [];

  var sourceProp = Object.keys(source)[0]; // Take the first key, index=0

  for (i = 0; i<collection.length; i++){
    // Use collection[i][sourceProp] to take the value
    if (collection[i].hasOwnProperty(sourceProp) && collection[i][sourceProp] == source[sourceProp]){
       arr.push(collection[i]);
    }
  }

  return arr;
}

注意:您错误地使用点符号来访问对象的值。 当您访问变量时:

source.sourceProp

它指的是 source 的 属性 sourceProp 这不是你想要做的。要使用变量名访问 属性,请使用 [] 符号并将您的变量传入:

source[sourceProp]