我正在为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' });
答案 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]