這是算法挑戰:如何調試這個代碼爲什麼你是?
請看起來通過對象(第一自變量)的陣列,並返回具有匹配屬性和值對(第二個參數)的所有對象的陣列的功能。源對象的每個屬性和值對必須存在於集合中的對象中(如果它將包含在返回的數組中)。
我寫過這個,但在某些情況下會出錯。這段代碼有什麼問題?
function whatIsInAName(collection,source) {
var ks = Object.keys(source);
var vals = [];
var arr = [];
var counter = ks.length;
for(var k in source) {
vals.push(source[k]);
}
for(var i = 0; i < collection.length; i++) {
for(var j = 0; j < counter; j++) {
if(collection[i].hasOwnProperty(ks[j]) && collection[i][ks[j]] === vals[j]) {
arr.push(collection[i]);
}
}
}
return arr;
}
函數調用&返回值
(1)電話:
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" })
(1)返回:(正確)
[{ first: "Tybalt", last: "Capulet" }]
(2)調用:
whatIsInAName([{ "a": 1 }, { "a": 1 }, { "a": 1, "b": 2 }], { "a": 1 });
(2)返回值:(正確)
[{ "a": 1 }, { "a": 1 }, { "a": 1, "b": 2 }]
(3)呼叫:
whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 });
(3 )返回:(不正確)
[{"a":1,"b":2}, {"a":1,"b":2}, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }, { "a": 1, "b": 2, "c": 2 }]
(4)調用:
whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "c": 2 });
(4)返回值:(不正確的)
[{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }, { "a": 1, "b": 2, "c": 2 }]
你什麼錯誤,以及在什麼情況下,你讓他們? –
請把你的評論和編輯你的問題,包括(並明確解釋),包括該數據。目前,該評論沒有說明你的問題。 –
whatIsInAName([{first:「Romeo」,last:「Montague」},{first:「Mercutio」,last:null},{first:「Tybalt」,last:「Capulet」}],{last: 「}) **回答:** [{第一個:」Tybalt「,上一個:」Capulet「}](正確) whatIsInAName([{」a「:1},{」a「:1}, {「a」:1,「b」:2}],{「a」:1}); **答案:** [{「a」:1},{「a」:1},{「a」:1,「b」:2}](正確) whatIsInAName([{「a 「:1,」b「:2},{」a「:1},{」a「:1,」b「:2,」c「:2}],{」a「:1, :2}) **答案:** [{「a」:1,「b」:2},{「a」:1,「b」:2},{「a」:1},{ 「a」:1,「b」:2,「c」:2},{「a」:1,「b」:2,「c」:2}](不正確) @ScottMarcus – Arnab