извлечь идентификатор из массива, используя карту с условием javascript - PullRequest
2 голосов
/ 12 марта 2020

Существует массив объектов

  const groups = [
    { id: 0, name: "All", selected: false },
    { id: -1, name: "All", selected: true },
    { id: 1, name: "Group1", selected: false },
    { id: 2, name: "Group2", selected: false },
    { id: 3, name: "Group3", selected: false },
    { id: 4, name: "Group4", selected: true }
  ];

Я хочу извлечь идентификаторы из этого объекта с картой

groups.map(group => group.id > 0 && group.selected ? group.id:null)

, но результат будет [null, null, 4, null ...] на самом деле это должно быть [4]

Я знаю, что могу использовать другую функцию, например forEach и pu sh или map и filter но я бы решил это за одну итерацию с картой или чем-то еще.

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Отфильтруйте объект (ы) по вашим критериям, а затем извлеките идентификаторы с картой

const groups = [{
    id: 0,
    name: "All",
    selected: false
  },
  {
    id: -1,
    name: "All",
    selected: true
  },
  {
    id: 1,
    name: "Group1",
    selected: false
  },
  {
    id: 2,
    name: "Group2",
    selected: false
  },
  {
    id: 3,
    name: "Group3",
    selected: false
  },
  {
    id: 4,
    name: "Group4",
    selected: true
  }
];


const result = groups.filter(x => x.id > 0 && x.selected).map(x => x.id)
console.log(result)
0 голосов
/ 15 марта 2020

в этом случае вы можете использовать преобразователь, чтобы не повторять массив 2 раза.

const groups = [
  { id: 0, name: "All", selected: false },
  { id: -1, name: "All", selected: true },
  { id: 1, name: "Group1", selected: false },
  { id: 2, name: "Group2", selected: false },
  { id: 3, name: "Group3", selected: false },
  { id: 4, name: "Group4", selected: true }
];

const filteredIds = groups.reduce(
  (ids, { id, selected }) => (
    id > 0 && selected ? [...ids, id] : ids
  ), []
);

console.log(filteredIds);
0 голосов
/ 12 марта 2020

Метод map () создает новый массив с результатами вызова функции для каждого элемента массива, и извлечение из этого невозможно. Либо используйте map (), а затем отбрасывайте элементы массива, либо используйте filter ().

Лучшим подходом было бы использование filter (). Метод filter () создает массив, заполненный всеми элементами массива, которые проходят тест (предоставляется как функция).

let result = groups.filter(x => x.id > 0 && x.selected).map(x => x.id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...