Мне нужно, чтобы наборы объектов / массив ...
var test = [{id: 1, prop: 'bill', location: 'san diego'},{id: 11, prop: 'bright'}];
var test2 = [{id: 1, prop: 'casey'},{id: 11, prop: 'candle'}];
В конечном итоге я хочу, чтобы объекты из test2 меняли свойства в тесте, но сохраняли свойство location в исходном объекте, поскольку оно не изменилось или даже не упоминалось в test2.
Что я сделал, так это установил отображение, ключом которого является идентификатор, и в качестве значения используется каждый объект.
Проблема возникает из-за того, что значение нового объекта на ключ перезапишет предыдущий исходный объект в целом. Следовательно, свойство location удаляется из исходного массива.
В частности, из Object.assign () голый объект, не представленный в виде массива объектов, сохранит целостность исходного объекта и изменит только базовые свойства.
Вот пример обоих:
массив объектов:
var o1 = [{id: 1, prop: 'bill', location: 'san diego'},{id: 11, prop: 'bright'}];
var o2 = [{id: 1, prop: 'casey'},{id: 11, prop: 'candle'}];
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // 0: {id: 1, prop: "casey"} 1: {id: 11, prop: "candle"} c: 3
единственный объект:
var o1 = {id: 1, prop: 'bill', location: 'san diego'};
var o2 = {id: 1, prop: 'casey'};
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // {id: 1, prop: "casey", location: "san diego", c: 3}
обработка объекта в одном формате имеет желаемый эффект, поэтому, возможно, ответ заключается в этом факте. Есть ли краткий способ сделать это, или это должно быть построено в зацикленном режиме, обрабатывая одну запись за раз? Если это так, что будет примером этого?
Вот код отображения, над которым я работал:
var test = [{id: 1, prop: 'bill', location: 'san diego'},{id: 11, prop: 'bright'}];
var first = new Map();
for (const value of test) {
//console.log(key + ' = ' + value.id);
first.set(value.id, value);
//console.log(first);
}
var test2 = [{id: 1, prop: 'casey'},{id: 11, prop: 'candle'}];
var second = new Map();
for (const value of test2) {
second.set(value.id, value);
}
var merged = new Map([...first, ...second]);
let mergedArray = [];
for (var value of merged.values()) {
console.log(' = ' + value);
mergedArray.push(value);
}
console.log('merged', mergedArray);
// console.log(merged)
// console.log('second2', second);
// console.log('first2 ', first);