搜索匹配属性和等效 属性 值
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]
我正在为 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]