У меня есть объект, который выглядит так:
var obj = {
1: {
'x': [ [], [], [] ],
'y': [ [], [] ],
},
2: {
'x': [ [], [] ],
'z': [ [] ],
},
}
У меня также есть другой объект, который я хочу получить и добавить в него.
var newObj = {};
Я хочу сравнить этот объект с другим объектом и получить различия. Я хочу оценить только ключевой уровень "целочисленный" и "буквенный" уровень ключа, а не внутренние дети.
В соответствии с различием добавьте отсутствующие и удалите удаленные. Однако, делая это различие, я хочу только добавлять новые ключи и значения, подобные этому: 'new': [ [] ]
, но сохраняйте существующие, если они существуют, и не трогают их. Добавляйте только отсутствующий ключ с пустым значением массива.
Есть способ сделать это?
Вот сценарий, где я более подробно объяснил примеры: https://jsfiddle.net/7ccd3una/1/
Если:
var newObj = {
1: {
'x': [ [], [], [] ],
},
2: {
'z': [ [] ],
},
}
и obj
var obj = {
1: {
'x': [ [], [], [] ],
'y': [ [], [] ],
},
2: {
'x': [ [], [] ],
'z': [ [] ],
},
}
После вызова функции я хочу, чтобы newObj был таким (добавьте только 1 пустой массив для новых):
newObj = {
1: {
'x': [ [], [], [] ],
'y': [ [] ]
},
2: {
'x': [ [] ],
'z': [ [] ],
},
}
Полный пример:
newObj = {} // just initialised.
obj = {
1: {
'x': [ [], [], [] ],
'y': [ [] ]
},
}
// newObj becomes,
newObj : {
1: {
'x': [ [] ],
'y': [ [] ]
},
}
// This newObj can get structured itself. So it can become like:
newObj : {
1: {
'x': [ [], [], [] ],
'y': [ [] ]
},
}
// ..separately from the obj.
// So I want to watch the letter key adds and removes actually. Let say obj became:
obj : {
1: {
'x': [ [] ],
'y': [ [] ],
'd': [ [], [] ],
},
2: {
'a': [ [], [], [] ],
'b': [ [], [] ]
}
}
// I want newObj to be:
newObj : {
1: {
'x': [ [], [], [] ],
'y': [ [] ], // don't do anything to existings
'd': [ [] ], // add empty array for new letter key
},
2: {
'a': [ [] ], // add empty array for letter key
'b': [ [] ] // ""
}
}
// And if items removed:
obj : {
1: {
'x': [ [] ]
}
// newObj becomes:
newObj: {
1: {
'x': [ [], [], [] ]
}
}
Попробуй это:
function copy(obj, newObj) {
var keys = Object.keys(obj)
keys.map(function(val){
if(newObj.hasOwnProperty(val)){
var keys_two = Object.keys(obj[val])
keys_two.map(function(prop){
if(!newObj.hasOwnProperty(prop)){
var data_two = obj[val][prop]
newObj[val][prop] = data_two;
}
})
} else {
var data = obj[val]
newObj[val] = data;
}
})
}
Вот на jsFiddle