Сравнить 2 массива
Arr1
[{
"id": 1, "name": "iphone", "checked": false
},{
"id": 2, "name": "samsung", "checked": false
},{
"id": 3, "name": "huawei", "checked": false
}]
Arr2
[{
"id": 15, "name": "iphone", "checked": true
},{
"id": 16, "name": "samsung", "checked": true
}]
Результат
[{
"id": 15, "name": "iphone", "checked": true
},{
"id": 16, "name": "samsung", "checked": true
},{
"id": 3, "name": "huawei", "checked": false
}]
Если name одинаковое то записать в массив значение где checked: true.
Моё решение
this.Arr1.forEach((element) => {
if(!~this.Arr2.indexOf(element)){
this.Arr2.push(element);
console.log(this.Arr2);
}
});
Ответы (2 шт):
Автор решения: vsemozhetbyt
→ Ссылка
'use strict';
const arr1 = [
{
"id": 1, "name": "iphone", "checked": false
}, {
"id": 2, "name": "samsung", "checked": false
}, {
"id": 3, "name": "huawei", "checked": false
},
];
const arr2 = [
{
"id": 15, "name": "iphone", "checked": true
}, {
"id": 16, "name": "samsung", "checked": true
},
];
arr1.forEach((element1, index) => {
const newElement = arr2.find(
element2 => element1.name === element2.name && element2.checked === true
);
if (newElement) arr1[index] = newElement;
});
console.log(arr1);
Автор решения: gkshi
→ Ссылка
Универсальная функция, принимающая на вход разное количество массивов, и которая не изменяет входящие массивы:
function combine (arrays = []) {
let result = []
arrays.forEach(array => {
array.forEach(item => {
let coincidence = result.find(i => i.name === item.name)
if (!coincidence) {
result.push(item)
} else if (item.checked === true) {
result = result.map(i => i.name === item.name ? item : i)
}
})
})
return result
}
const res = combine([array1, array2])
console.log('res', res)