【发布时间】:2016-01-20 12:08:54
【问题描述】:
我正在尝试解决 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]]更易于阅读。如果您了解过函数,那么这个算法至少可以分解为两个函数。例如,我想要一个函数来确定两个对象是否匹配。
标签: javascript