Найти массив объектов из массива ключей - PullRequest
0 голосов
/ 10 июля 2019

У меня есть массив объектов

let objList = [
 {
  id:10,
  ...
 },

 {
  id: 12,
  ...
 },

 {
  id: 13,
  ...
 },

 ...
];

и я хотел отфильтровать все объекты, чьи идентификаторы находятся в другом массиве

let keyList = [10, 13];

Expected output:

[
 {
  id: 10,
  ...
  },

 {
  id: 13,
  ...
 }
]

Примечание :

Треб. находится в приложении Angular 7, и я также использую библиотеку Lodash.

Я пытался:

objList.filter(eachObj => keysList.forEach(
          eachID => {
            eachID == eachObj['id']
          }
        ))

и

find(ObjList, eachObj => {

          return eachObj['id'] === keysList.map(eachID => {
            return eachID;
          })
        })

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Вы не получили желаемый результат, так как не получили поле id из своего массива. Поэтому попробуйте использовать метод includes и получите свойство id:

const filteredArray = objList.filter(o => keyList.includes(o.id));
console.log(filteredArray);
1 голос
/ 10 июля 2019

Используйте _.differenceWith(), чтобы сравнить id с key и удалить элементы, которые существуют в обоих массивах:

const objList = [{ id: 10 }, { id: 12 }, { id: 13 }];
const keyList = [10, 13];

const result = _.differenceWith(objList, keyList, ({ id }, key) => id === key);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.13/lodash.js"></script>
1 голос
/ 10 июля 2019

Вы можете использовать фильтр:

objList = objList.filter(element => keyList.indexOf(element.id) > -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...