Сравнение массивов для получения списка значений

#javascript #arrays #ecmascript-6 #lodash

#javascript #массивы #ecmascript-6 #Lodash

Вопрос:

У меня есть список первых массивов

 const a = [{id:1, value:'apple'}, {id:2, value: 'ball'},{id:3, value: 'cat'}]
  

У меня есть другой массив идентификаторов

 const ids = [1,2]
  

Теперь мне нужно получить список значений массива из a , идентификатор которого указан в массиве ids. Ожидаемый результат:

 const b =  [{id:1, value:'apple'}, {id:2, value: 'ball'}]
  

Ответ №1:

Вы можете использовать Array.prototype.filter :

 a.filter(({ id }) => ids.includes(id));
  

 const a = [{id:1, value:'apple'}, {id:2, value: 'ball'}];

const ids = [1,2];

const result = a.filter(({ id }) => ids.includes(id));

console.log(result);  

Ответ №2:

Вы можете создать a Set из массива идентификаторов и использовать Array#filter with Set#has (который выполняется во O(1) времени) для повышения производительности.

 const a = [{id:1, value:'apple'}, {id:2, value: 'ball'},{id:3, value: 'cat'}]
const ids = [1,2]
const idSet = new Set(ids);
const res = a.filter(({id})=>idSet.has(id));
console.log(res);  

Ответ №3:

Если я вас правильно понял, вы хотите получить value параметры из a для каждой из записей, которые имеют соответствие id в ids коллекции?

 let results = a.filter(node=>ids.indexOf(node.id) !== -1);
  

Чтобы разбить Array.prototype.filter команду:

a.filter функционально сообщает компилятору повторять a коллекцию (как for цикл); хотя единственные записи, которые возвращаются из него, возвращаются, когда из его обратного вызова возвращается истинное значение (функция применяется после node=> бита).

node является ли временная переменная, назначенная активному индексу, проверяемому на итерации.

ids.indexOf(...) запрашивает числовой индекс node.id в коллекции. Если node.id не присутствует нигде в коллекции, indexOf возвращает -1 .

Итак, все вместе взятое: «выполните цикл a и для каждого из содержащихся в нем объектов проверьте каждый из них на соответствие ids и верните либо true , либо false в зависимости от того, было ли оно найдено (некоторое значение, ОТЛИЧНОЕ от -1 ) или нет ( -1 ). Массив. фильтр автоматически отобразит только те, чьи результаты были верными.