У меня есть следующий массив объектов из моей базы данных:
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;
}
});
Как я могу добиться такого поведения в одной строке? Я знаю, что могу создать вспомогательную переменную и справиться с этим. Но я хотел бы однострочный в этом случае. Это возможно? Кажется, что я должен фильтровать и отображать одновременно?
Потому что я делаю это внутри setState()
. Спасибо!
Вам нужны две части, потому что фильтрация отображает не значение, а исходные элементы.
Вы можете отфильтровать по selected
, а затем сопоставить src
.
images: dataFromDB.images
.filter(({ selected }) => selected)
.map(({ src }) => src)