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

时间:2015-06-30 05:02:17

标签: javascript loops object properties

我正在为freecodecamp工作,发现自己很困难。任务是:

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

以下是一些有用的主题:

全球对象

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' });

1 个答案:

答案 0 :(得分:4)

您的代码中存在一些拼写错误。见下面的评论:

[a] Object.keys()会返回属性键的数组。要取第一个和唯一的键,您应该使用[0],而不是[1]。

[b] 在if语句的条件下,您必须通过collection[i][sourceProp]引用第i个元素的值,其中sourceProp是您所使用的键从步骤[a]。请参阅答案底部的“为什么”。

[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

它指的是sourceProp的属性source,这不是你想要做的。要访问具有变量名称的属性,请使用[]表示法并将变量传递到:

source[sourceProp]