这是我的第一篇文章,我已经研究过,但我不确定我在搜索中正确地表达了这个问题。Object.keys返回不等于
我试图比较一个对象的键与另一个对象中的键(这是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)))
返回false即使当集合[I]中确实包含的按键按如下。
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相等?感谢您的时间!
非常感谢您花时间帮忙!在发布之前,我确实想出了一个更好的方法来解决算法,我想我应该更清楚一点。我试图理解为什么 集合[0] .hasOwnProperty(Object.keys(source)) 在上述集合[0]和Object.keys(源)等于a,b时等于false。 – Will
由于 'WhereAreYou([{“a”:1},{“a”:1},{“a”:1,“b”:2}],{“a”:1}) Object。 (源)= Object.keys(collection [0]))= a collection (object.keys(source))= a Object.keys(collection [2]))= a,b 集合[2] .hasOwnProperty(Object.keys(source))= true []' 为什么不a,b返回true? – Will