我想寫一個函數來檢查兩個對象是否有相同的值。該函數要求我檢查在原始對象內存儲爲值的任何對象的相等性。我開發的方法(見下面的代碼)首先檢查非對象值的相等性。然後,如果這些都匹配,我再次迭代對象並對原始函數進行遞歸調用,這允許我比較兩個對象的每個嵌套級別。函數檢查嵌套對象的「深度相等」
但是,這種方法只能部分起作用。遞歸調用的本質意味着我只能檢查對象中第一個鍵 - 值對的嵌套對象的相等性。一旦第一組嵌套對象被比較並且遞歸調用返回,我無法弄清楚如何檢查包含嵌套對象的任何附加鍵 - 值對。下面是函數:
var deepEqual = function(val1, val2) {
if (typeof val1 === 'object' && typeof val2 === 'object') {
for (i in val1) {
for (i in val2){
if (typeof val1[i] !== 'object' && typeof val2[i] !== 'object') {
if (val1[i] !== val2[i]) {
return false
}
}
}
}
for (i in val1) {
for (i in val2){
if (typeof val1[i] === 'object' && typeof val2[i] === 'object') {
return deepEqual(val1[i], val2[i])
}
}
}
return true
}
else if (val1 === val2) {
return true
}
else return false
}
我的基本問題是,我認爲我需要一個遞歸調用檢查嵌套對象的深平等,但我只能做這個檢查一次成功。有人試圖解決這樣的問題嗎?如果您需要更具體的對象,我會提供針對特定對象的結果示例。謝謝!
你是說你不在乎物業名稱?順便說一句,'因爲(我在val1)(我在val2)'是災難性的。 – Bergi
我正在檢查值。同意for循環不是最優 - 與我一起,我是一個沒有經驗的程序員,這是我第一次通過這個問題 – benpiggot
所以你會期望'{a:1,b:2}'和'{a:2 ,b:1}'相等(因爲它們包含相同的值)? – Bergi