Фильтровать массив объектов, но вернуть только указанные c свойства - JS - PullRequest
1 голос
/ 10 апреля 2020

Как отфильтровать массив объектов с условием и вернуть только указанные c свойства отфильтрованных объектов?

Я знаю, что для этого можно использовать фильтр, а затем карту. Но я ищу более простое решение.

Например: let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]

Предположим, если я хочу только идентификаторы имени "lala".

Вывод должен быть,

[{id: 1}, {id: 3}]

Ответы [ 7 ]

3 голосов
/ 10 апреля 2020

Вы можете просто использовать Array.prototype.reduce, чтобы объединить отображение и фильтрацию в одной и той же операции. Если вы хотите сделать его очень сжатым, вы можете использовать деструктуризацию объекта во втором аргументе обратного вызова Reduce:

let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}];

let filteredMappedArr = arr.reduce((acc, { name, id }) => {
  if (name === 'lala')
    acc.push({ id });
    
  return acc;
}, []);

console.log(filteredMappedArr);
2 голосов
/ 10 апреля 2020

Следующим самым простым будет сокращение

let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}];

console.log(
  arr.reduce((values, value) =>
  {
    if (value.name === 'lala') values.push({ id: value.id });
    return values;
  }, [])
);
1 голос
/ 10 апреля 2020

Вы можете взять Array#flatMap и вернуть либо новый объект, либо пустой массив, который не имеет значения для выравнивания.

let array = [{ name: "lala", id: 1 }, { name: "coco", id: 2 }, { name: "lala", id: 3 }],
    result = array.flatMap(({ id, name }) => name === 'lala' ? [{ id }] : []);

console.log(result);
1 голос
/ 10 апреля 2020

Вы можете сделать это, используя filter и map;

let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]
let res = arr.filter(item => item.id % 2 === 1).map(item => ({id: item.id}))

console.log(res);
1 голос
/ 10 апреля 2020

filter, за которым следует map, вероятно, является наиболее читаемым решением, но если вы хотите сделать все это за один шаг, вы посмотрите на класс c for l oop или используя reduce.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

0 голосов
/ 11 апреля 2020

let arr = [
  { name: "lala", id: 1 },
  { name: "coco", id: 2 },
  { name: "lala", id: 3 },
];
let a = [];
arr.filter(({ name, id }) => {
  if (name === "lala") {
    a.push({ id });
  }
});
console.log(a);

с фильтром мы проверяем условие, когда имя соответствует 'lala', если да, тогда мы выводим id sh в новый массив ... это просто

0 голосов
/ 10 апреля 2020

с использованием .filter () и .map () функции:

let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]

let newArr = arr.filter((elm) => (elm.name === 'lala')).map( (elm) => {return {id:elm.id}});
console.log(newArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...