1
讓我們有一些默認設置的對象:遞歸減去兩個JavaScript對象
var defaults = {
id: '',
x: 0,
y: 0,
width: 20,
height: 20,
styles: {
color: '#ffffff',
background_color: '#000000'
},
points: []
}
然後,我們做我們自己的對象,最初擴展了默認設置,並做了一些變更:
var newObject = {
id: '1', // changed
x: 10, // changed
y: 10, // changed
width: 20,
height: 20,
styles: {
color: '#ffffff',
background_color: '#333333' // changed
},
points: [1, 2, 3]
}
最後,我們需要一個對象,其中只包含從默認設置更改的值,如下所示:
var subtracted = {
id: '1',
x: 10,
y: 10,
styles: {
background_color: '#333333'
},
points: [1, 2, 3]
}
算法需要遞歸,對象內可以有對象。這是我到目前爲止:
function subtract(a, b) {
var r = {};
// For each property of 'b'
// if it's different than the corresponding property of 'a'
// place it in 'r'
for (var key in b) {
if (typeof(b[key]) == 'object') {
if (!a[key]) a[key] = {};
r[key] = subtract(a[key], b[key]);
} else {
if (b[key] != a[key]) {
r[key] = a[key];
}
}
}
return r;
}
但是,遞歸不適用於數組,所以「點」結果是一個空對象! typeof()將它檢測爲一個對象,但無法克隆它的屬性。
https://jsfiddle.net/gd8q1u18/1/
哦,這是一個愚蠢的錯誤:) –
哈哈..它發生:) – Sachin
接受的答案??? – Sachin