Как отфильтровать и изменить массив объектов с помощью одной строки кода? - PullRequest
1 голос
/ 30 мая 2019

У меня есть следующий массив объектов, поступающих из моей базы данных:

dataFromDB = [
  { src: 'stringWithSource1',
    selected: true
  },
  { src: 'stringWithSource2',
    selected: false
  },
  { src: 'stringWithSource3',
    selected: true
  },
  AND SO ON...
];

Когда я получаю его из базы данных, мне нужно сохранить на стороне клиента в state, что должно бытьмассив строк , содержащий только свойство src объектов, которые selected: true.

Пример:

myState = [
  'stringWithSource1',
  'stringWithSource3',
  AND SO ON...
]

ВОПРОС

Строка, где я ее назначаю, выглядит следующим образом (см. Код ниже):

Я пытался, но это не работает, потому чтоЯ оставляю невыбранным src как null вместо того, чтобы просто их пропустить.

setProductDetails({
  // ... other properties,
  images: dataFromDB.images.map((item) => {
    return item.selected ? item.src : null;
  }
});

Как мне добиться такого поведения в одной строке, как эта?Я знаю, что мог бы создать вспомогательную переменную и обработать это.Но я бы хотел однострочник в этом случае.Это возможно?Такое чувство, что я должен фильтровать и отображать одновременно?

1 Ответ

5 голосов
/ 30 мая 2019

Вам нужны две части, потому что фильтрация отображает не значение, а исходные элементы.

Можно выполнить фильтрацию по selected, а затем отобразить src.

images: dataFromDB.images
    .filter(({ selected }) => selected)
    .map(({ src }) => src)
...