2016-05-02 33 views
0

我正在使用Lodash _.isEqual深度比較本地JavaScript對象與通過角度$ get檢索到的另一個JavaScript對象。Lodash isEqual因角度定義構造函數而失敗

此代碼表示,對象是不同的:

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    if (_.isEqual(data, {name: 'Someone'}) { 
    ... 
    } 
}); 

但換款就有點像現在跟隨它說,他們是平等的(如預期):

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    if (_.isEqual(JSON.parse(JSON.stringify(data)), {name: 'Someone'}) { 
    ... 
    } 
}); 

我調試到Lodash代碼,它似乎失敗,因爲兩個對象有不同的構造函數。

如何在不克隆數據的情況下解決這個問題?

+1

JSON.parse也將擺脫功能... – elclanrs

+0

這有可能是原來'data'包含了這些功能,但是當你做'JSON.parse(JSON.stringify(數據)'創建相同的對象,但沒有函數。因爲在第一種情況下'isEqual'返回false,在第二個true。 – alexmac

+0

'cleanupAngularProps'做什麼?您應該能夠從一個angularjs $ http獲得一個POJO和原始JSON請求將簡化與另一個POJO的比較 –

回答

0

我不確定這是否是一種好的做法,但我通過重置原型,因此構造函數來解決它。

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    data.__proto__ = Object.prototype; 

    if (_.isEqual(data, {name: 'Someone'}) { 
    ... 
    } 
}); 
相關問題