2015-04-05 105 views
-1

我有三個對象,object1:{a: 1, b: 2}; object2:{a: 1, b: 3}; object3:{a: 1, b: 2, c: 3},並且希望將最後兩個與第一個進行比較,並且只在它們相等時才返回它們(只要它包含的鍵彼此相等,它們的值就越多就無關緊要)。測試對象是否相等和/或對象是否有更多按鍵,但仍等於共用的對象

所以,我想要返回object3。

+0

您可能想要更改您的問題。 「平等」並不意味着你在說什麼。你正在尋找的是所謂的「統一」:你想找到哪些對象可以與第一個統一。 – Touffy 2015-04-05 14:12:05

+0

謝謝,我不知道那個字;現在我知道要搜索什麼。 – Mobilpadde 2015-04-05 14:33:17

+0

更準確地說,*統一*兩個對象不僅僅是做比較,它意味着創建一個包含兩者的所有屬性的對象。但只有在兩個對象中具有相同名稱的屬性具有相同的值(對象是* unifiable *)時纔有可能。 – Touffy 2015-04-05 14:48:04

回答

0

比較c您可以檢查在a每個鍵從b或者不存在或具有相同的值使用Array#all

function unifiable(a, b) { 
    return Object.keys(a) . all(function(key) { return a[key] === b[key]; }); 
} 

這是沒有必要顯式檢查的keyb存在,因爲如果b不包含key然後b[key]是未定義的,這將不等於在akey任何值。

以上將在b的原型鏈中找到key的值,所以如果這是個問題,您需要對b.hasOwnProperty(key)進行明確檢查。

如果你想NaN被認爲是平等的,你必須單獨檢查。

這將簡單地檢查兩個對象是否可以一致。要真正統一他們,只要你想,一個簡單的想法是

unifiable(a, b) && Object.assign(a, b) 

Object.assign可以通過$.extend_.extendEmber.merge,或您喜愛的其他物體合併所取代。

+0

我會接受你的答案,因爲引用下劃線,這幫助我做我想要實現的。 (使用'_.isMatch') – Mobilpadde 2015-04-05 18:58:48

+0

關於NaN和undefined的好處。您可以使用'Object.getOwnPropertyNames'而不是'keys()'來避免繼承的屬性。另外,請記住,這與我們發佈的所有其他答案一樣淺。 – Touffy 2015-04-06 05:08:25

0

在這裏你去(但請解決你的問題)。這需要兩個參數並返回它們是否可以統一(即它們共有的屬性是否具有相同的值)。這只是做一個淺層比較。使其遞歸深比較作爲練習留給讀者;)

function unifiable(a, b){ 
    for(var prop in a) if(a.hasOwnProperty(prop) 
     && b.hasOwnProperty(prop) && a[prop] !== b[prop]) 
    return false 
    return true // will happen if the loop ended without returning 
} 
0

您可以使用此功能

使一個功能

  • 檢查是否有自己的屬性
  • 檢查對象a的屬性存在於對象b中
  • 最終將第一個對象的屬性與屬性第二個對象的。

    function copareobjectkeys(a,b) 
    { 
        for(var k in a) 
        { 
    
         if(a.hasOwnProperty(k) && b.hasOwnProperty(k) && b[k]!=a[k]) 
         return false; 
        } 
    return true 
    } 
    

現在有這三個對象

a ={a: 1, b: 2}; 
b= {a: 1, b: 3}; 
c= {a: 1, b: 2, c: 3} 

A和B具有

copareobjectkeys(c,a) //true 
copareobjectkeys(b,a) //false 
+0

代碼中的'!! b [k]'條件將阻止檢測與'b'中的任何falsy值的衝突。 – Touffy 2015-04-05 14:43:47

+0

@Touffy不,它會確保它是比較當且僅當b也有該密鑰 – 2015-04-05 15:44:50

+0

我認爲後b.hasOwnProperty(k)我不需要 – 2015-04-05 15:47:27

相關問題