我正在尝试解决一个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]]
更易于阅读。如果您已经学习了函数,那么这个算法就需要被分解成至少两个函数。例如,我想要一个函数仅用于确定两个对象是否匹配。 - Jack A.