【发布时间】:2017-12-12 09:22:27
【问题描述】:
这是我的第一篇文章,我进行了研究,但我不确定我在搜索中是否以正确的方式表达了这个问题。
我正在尝试将一个对象的键与另一个对象中的键进行比较(这是针对 freeCodeCamp 算法的)。我的代码如下:
function whereAreYou(collection, source) {
var arr = [];
for (var i=0;i<collection.length;i++) {
console.log("Object.keys(source)= " + Object.keys(source));
console.log("Object.keys(collection[" +i + "]))= " + Object.keys(collection[i]));
console.log("collection[" +i + "].hasOwnProperty(Object.keys(source))= " + collection[i].hasOwnProperty(Object.keys(source)));
if (collection[i].hasOwnProperty(Object.keys(source))) {
var prop = Object.keys(source);
console.log("prop=" + prop);
console.log("collection[" +i + "][prop]= " + collection[i][prop]);
console.log("source[prop]= " + source[prop]);
if (collection[i][prop] === source[prop]) {
arr.push(collection[i]);
}
}
}
return arr;
}
当源参数中有多个键时,
if (collection[i].hasOwnProperty(Object.keys(source)))
即使 collection[i] 确实包含如下所示的键,也会返回 false。
whereAreYou([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 })
Object.keys(source)= a,b
Object.keys(collection[0]))= a,b
collection[0].hasOwnProperty(Object.keys(source))= false
Object.keys(source)= a,b
Object.keys(collection[1]))= a
collection[1].hasOwnProperty(Object.keys(source))= false
Object.keys(source)= a,b
Object.keys(collection[2]))= a,b,c
collection[2].hasOwnProperty(Object.keys(source))= false
[]
我的问题是为什么 a,b 和 a,b 不相等?感谢您的宝贵时间!
【问题讨论】:
-
非常感谢您抽出宝贵时间提供帮助!在发布之前,我确实想出了一个更好的方法来解决算法,我想我应该在这方面更清楚。我试图理解为什么 collection[0].hasOwnProperty(Object.keys(source)) 在上面的集合 [0] 和 Object.keys(source) 都等于 a,b 时等于 false。
-
鉴于
whereAreYou([{ "a": 1 }, { "a": 1 }, { "a": 1, "b": 2 }], { "a": 1 }) Object.keys(source)= a Object.keys(collection[0]))= a collection[0].hasOwnProperty(Object.keys(source))= true Object.keys(source)= a Object.keys(collection[1]))= a collection[1].hasOwnProperty(Object.keys(source))= true Object.keys(source)= a Object.keys(collection[2]))= a,b collection[2].hasOwnProperty(Object.keys(source))= true []为什么 a,b 不返回 true?
标签: javascript arrays object key