为什么这段代码不起作用?我尝试遍历对象集合并检测属性值是否与源匹配。如果属性值匹配,我想将它们推入数组。当我在for循环中使用console.log时,我未定义,并且所有内容似乎都被推入了数组。这是代码:
function where(collection, source) {
var arr = [];
// What's in a name?
for(var i =0; i < collection.length; i++){
for(var key in collection){
if (collection[i][key] === source[key]) {
arr.push(collection[i]);
}
}
}
}
return arr;
}
where([{ first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { first: 'Tybalt', last: 'Capulet' }], { last: 'Capulet' });
我的想法是这应该可行,但我不确定代码出了什么问题。我该如何修复代码?
当我尝试测试是否可以记录值时,如果未定义,则不确定原因:
function where(collection, source) {
var arr = [];
// What's in a name?
for(var i =0; i < collection.length; i++){
for(var key in collection){
console.log("collection[i][key]:",collection[i][key]);
console.log("source[key]:", source[key]);
}
}
return arr;
}
答案 0 :(得分:2)
你只需要在第二个for循环中添加[i](
for(集合中的var键 [i] )
function where(collection, source) {
var arr = [];
// What's in a name?
for(var i =0; i < collection.length; i++){
for(var key in collection[i]){
if(collection[i][key] === source[key])
{
arr.push(collection[i]);
}
}
}
return