这是算法挑战:如何调试这个代码为什么你是?
请看起来通过对象(第一自变量)的阵列,并返回具有匹配属性和值对(第二个参数)的所有对象的阵列的功能。源对象的每个属性和值对必须存在于集合中的对象中(如果它将包含在返回的数组中)。
我写过这个,但在某些情况下会出错。这段代码有什么问题?
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