我正在尝试解决freeCodeCamp练习并且卡住了。练习的目标是:创建一个函数,查看对象数组(第一个参数),并返回具有匹配的属性和值对(第二个参数)的所有对象的数组。源对象的每个属性和值对必须存在于集合中的对象中(如果它将包含在返回的数组中)。在对象数组中搜索匹配的属性和值对
所以我做了什么,是做一个密钥对的集合,另一个数组与密钥对源。为了查找匹配键,我嵌套for循环,如果找到这些键,则比较属性。
但不知何故,我的代码返回没有匹配。
var collection = [{
first: "Romeo",
last: "Montague"
}, {
first: "Mercutio",
last: null
}, {
first: "Tybalt",
last: "Capulet"
}];
var source = {
last: "Capulet"
};
var collectionKeys = [];
for (var i = 0; i < collection.length; i++) {
collectionKeys.push(Object.keys(collection[i]));
}
var sourceKeys = Object.keys(source);
//for every key pair
for (var t = 0; t < collectionKeys.length; t++) {
//for every key in key pair
for (var x = 0; x < collectionKeys[t].length; x++) {
//for every key in search
for (var y = 0; y < sourceKeys.length; y++) {
//see if a key matches
if (sourceKeys[y] == collectionKeys[t][x]) {
//see if the value matches
if (collection[collectionKeys[t][x]] == source[sourceKeys[y]]) {
console.log(collection[t]);
} else {
console.log("value not found");
}
} else {
console.log("key not found");
}
}
}
}
有人能指出我做错了什么吗?如果你想修补,我也创建了JSfiddle。
你会被更好的变量名称所包围,包括创建一些临时变量以更好地表达正在处理的内容。例如,'sourcePropertyValue'比source [sourceKeys [y]]更容易阅读。如果你已经了解了函数,那么这个算法就会乞求分解成至少两个函数。例如,我想要一个函数来确定两个对象是否匹配。 –