我正在嘗試解決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]]更容易閱讀。如果你已經瞭解了函數,那麼這個算法就會乞求分解成至少兩個函數。例如,我想要一個函數來確定兩個對象是否匹配。 –