Сравнить и вернуть логическое значение, если два массива объектов имеют значения или нет - PullRequest
0 голосов
/ 03 мая 2020

У меня есть два массива объектов, которые похожи на

let A = [{id: "1"}, {id: "2"},{id: "3" }]

let B = [{id: "3"}, {id: "2"}]

Теперь я перебираю A.

return _.map(A) => ({
    id: A.id,
    isAvaliable: //This needs to be like weather B includes A on the basis of ID , means does B object has this A client ID if yes then set it true or false
})

Итак, последний объект, который я получу, будет быть,

const result = [{
{id: "1", isavaliable: false},
{id: "2", isavaliable: true},
{id: "3", isavaliable: true},

}
]

Итак, как мне этого добиться? Спасибо.

Ответы [ 3 ]

1 голос
/ 03 мая 2020

let A = [{ id: "1" }, { id: "2" }, { id: "3" }];

let B = [{ id: "3" }, { id: "2" }];

const merge = (arr1, arr2) =>
  arr1.map((a) => ({
    id: a.id,
    isAvaliable: !!arr2.find((b) => b.id === a.id),
  }));
console.log(merge(A, B));
1 голос
/ 03 мая 2020

Сначала создайте массив или набор идентификаторов B, затем вы можете .map A и установить isavailable в зависимости от того, включен ли идентификатор в набор:

const A = [{id: "1"}, {id: "2"},{id: "3" }];
const B = [{id: "3"}, {id: "2"}];
const haveIds = new Set(B.map(({ id }) => id));

const result = A.map(({ id }) => ({ id, isavailable: haveIds.has(id) }));
console.log(result);

Нет необходимости полагаться на внешнюю библиотеку, Array.prototype.map отлично работает.

0 голосов
/ 04 мая 2020

Используйте loda sh 'find' для проверки идентификатора в массиве B

const A = [{id: '1'}, {id: '2'}, {id: '3' }];
const B = [{id: '3'}, {id: '2'}];

const C = _.map(A, item => {

        return {
            id: item.id,
            isAvailable: _.find(B, {id: item.id}) ? true : false
        };
    });
...