var array1 = [
{name: "dima"}
];
var array2 = [
{
name: "dima",
age: 22,
notes: "test0"
},
{
name: "oleg",
age: 27,
notes: "test1"
},
{
name: "vasja",
age: 44,
notes: "test2"
}
];
var array1 = [
{
name: "dima",
age: 22,
notes: "test0"
}
];
И нужно чтобы это работало с другими значениями, то есть если у нас в первом массиве другой name, то нужно чтобы брались свойства из второго массива у которого такой же name. Как такое сделать?
Так как мы имеем дело с объектами, оператором присваивания = их "копировать" будет неразумно: потому что это будет не копирование, а создание в массиве array1 референсных ссылок на объекты в элементах array2 (т.е., первый массив фактически не будет содержать присвоенные таким образом объекты).
Для копирования полей объекта, разумно использовать один из следующих способов (на них список не заканчивается, но эти два - основные):
Object.assign.Примеры ниже - демонстрируют второй подход, как наиболее простой и компактный.
Копирование полей только тех объектов, которые присутствуют в первом массиве:
var array1 = [
{ name: "dima" }
];
var array2 = [
{ name: "dima", age: 22, notes: "test0" },
{ name: "oleg", age: 27, notes: "test1" },
{ name: "vasja", age: 44, notes: "test2" }
];
function objArrMerge(target, source) {
const findTargetObj = n => target.find(o => o.name === n);
let tObj;
for (let i = 0; i < source.length; i++) {
if (source[i].name && source[i].name.length && (tObj = findTargetObj(source[i].name)))
tObj = Object.assign(tObj, source[i]);
}
}
objArrMerge(array1, array2);
document.body.style.cssText = 'font: 14px monospace; white-space: pre;';
document.body.textContent = 'array1:\n' + JSON.stringify(array1, null, 2);
Копирование полей всех объектов (если в первом массиве объект отсутствует - он будет создан):
var array1 = [
{ name: "dima" }
];
var array2 = [
{ name: "dima", age: 22, notes: "test0" },
{ name: "oleg", age: 27, notes: "test1" },
{ name: "vasja", age: 44, notes: "test2" }
];
array1 = Object.assign(array1, array2);
document.body.style.cssText = 'font: 14px monospace; white-space: pre;';
document.body.textContent = 'array1:\n' + JSON.stringify(array1, null, 2);
можно сделать так:
for(i=0; i < array1.length;i++)
{
if(array2[i].name == array1[i].name)
{
array1[i] = array2[i];
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей