2017-07-08 43 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; 
}