Сравнить два массива объектов Js
Требуется помощь в реализации задачи! Имеем два массива:
const arr = [
{
stackId: "1",
name: "Ivan",
otherInfo: "bla-bla-bla",
}
{
stackId: "2",
name: "Igor",
otherInfo: "bla-bla-bla",
}
{
stackId: "3",
name: "Andrey",
otherInfo: "bla-bla-bla",
}
]
const arr2 = [
{
_id: "1",
key: "active",
otherInfo: "bla-bla-bla",
}
{
_id: "2",
key: "not active",
otherInfo: "bla-bla-bla",
}
{
_id: "3",
key: "not active",
otherInfo: "bla-bla-bla",
}
Нужно пробежаться по всему массиву и для каждого объекта сравнить stackId из arr и _id из arr2 и если они совпадают, то в arr для проверяемого объекта нужно добавить свойство status с соответствующим значением из свойства key из массива arr2... Исходя из примера должен получиться такой массив
const result = [
{
stackId: "1",
name: "Ivan",
status: "active",
otherInfo: "bla-bla-bla",
}
{
stackId: "2",
name: "Igor",
status: "not active",
otherInfo: "bla-bla-bla",
}
{
stackId: "3",
name: "Andrey",
status: "not active",
otherInfo: "bla-bla-bla",
}
]
P.S. массивы могут быть не отсортированы, так что нужно ориентироваться только на stackId и _id
Ответы (2 шт):
Автор решения: Jour
→ Ссылка
Попробуйте так
const arr = [
{
stackId: "1",
name: "Ivan",
otherInfo: "bla-bla-bla",
},
{
stackId: "2",
name: "Igor",
otherInfo: "bla-bla-bla",
},
{
stackId: "3",
name: "Andrey",
otherInfo: "bla-bla-bla",
}
]
const arr2 = [
{
_id: "1",
key: "active",
otherInfo: "bla-bla-bla",
},
{
_id: "2",
key: "not active",
otherInfo: "bla-bla-bla",
},
{
_id: "3",
key: "not active",
otherInfo: "bla-bla-bla",
}
]
//
const indexs = new Map()
arr2.forEach(el => indexs.set(el._id, el.key))
arr.map(el => {
const key = indexs.get(el.stackId)
if ( !key ) return el
el.status = key
return el
})
console.log(arr)
Автор решения: Pr0gramm1st
→ Ссылка
const arr = [{
stackId: "1",
name: "Ivan",
otherInfo: "bla-bla-bla",
}, {
stackId: "2",
name: "Igor",
otherInfo: "bla-bla-bla",
}, {
stackId: "3",
name: "Andrey",
otherInfo: "bla-bla-bla",
}];
const arr2 = [{
_id: "1",
key: "active",
otherInfo: "bla-bla-bla",
}, {
_id: "2",
key: "not active",
otherInfo: "bla-bla-bla",
}, {
_id: "3",
key: "not active",
otherInfo: "bla-bla-bla",
}];
const result = [];
for (let i = 0; i <= arr.length - 1; i++) {
for (let y = 0; y <= arr2.length - 1; y++) {
if (arr[i].stackId == arr2[y]._id) {
arr[i].status = arr2[y].key;
result[i] = {
stackId: arr[i].stackId,
name: arr[i].name,
status: arr[i].status,
otherInfo: arr2[y].otherInfo,
}
}
}
}
console.log(result);
P.S. Но у Владимира красивее ответ)) Хотя и не учтён порядок элементов в элементе-объекте в результирующем массиве