对象键返回为不相等



这是我的第一篇文章,我已经研究了,但我不确定我在搜索中是否正确措辞了这个问题。

我正在尝试将一个对象的键与另一个对象中的键进行比较(这适用于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)))

即使集合 [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不相等?谢谢你的时间!

FreeCodeCamp很棒。 如果这是他们接受过的一些培训的具体问题,通常他们的论坛是一个很好的出口。他们会更多地了解您的要求以及它与什么有关。 但是,如果您只是想比较对象,这似乎很冗长。

查看堆栈上的其他一些帖子,这里有一些有助于理解比较对象的链接。 JavaScript 中的对象比较

来自 MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness

我不确定hasOwnProperty是你想要的。查看hasOwnProperty的定义: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

您需要比较每个数组中的项目。例如,在第一次迭代中:

Object.keys(collection[i]).includes("a") // true
Object.keys(collection[i]).includes("b") // true
Object.keys(collection[i]).includes(Object.keys(source)[0]) // true
Object.keys(collection[i]).includes(Object.keys(source)[1]) // true

您可以遍历Object.keys(source)并将其与Object.keys(collection[i])进行比较,也可以尝试更短的内容,请参阅: 确定一个数组是否包含 JavaScript/CoffeeScript 中另一个数组的内容

你可以做这样的事情:

function whereAreYou(collection, source) {
var arr = [];
for (var i = 0; i < collection.length; i++) {
for (var j = 0; j < Object.keys(source).length; j++) {
if (Object.keys(collection[i]).includes(Object.keys(source)[j])) {
// do your comparisons here
}
}
}
return arr;
}

最新更新