2017-07-08 70 views
0

这是我的第一篇文章,我已经研究过,但我不确定我在搜索中正确地表达了这个问题。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

非常感谢您花时间帮忙!在发布之前,我确实想出了一个更好的方法来解决算法,我想我应该更清楚一点。我试图理解为什么 集合[0] .hasOwnProperty(Object.keys(source)) 在上述集合[0]和Object.keys(源)等于a,b时等于false。 – Will

+0

由于 '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返回t​​rue? – Will

回答

0

FreeCodeCamp很棒。如果这是他们培训的具体问题,通常他们的论坛是一个很好的出路。他们会更多地了解你所问的内容以及它与之相关的内容。但是,如果你只是想比较对象,这看起来很冗长。

查看堆栈上的其他一些帖子以查看,这里有几个链接帮助理解比较对象。 Object comparison in 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

0

我不知道那是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]),或尝试一些更短的,请参阅: Determining whether one array contains the contents of another array in 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; 
} 
相关问题