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];
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую react-js и библиотеку https://material-ui-nextcom/demos/buttons/
Нужно чтобы метод работал определенное время, например выводил в textarea слово 5 секунд, что для этого можно использовать?