#javascript #reactjs #ecmascript-6
#javascript #reactjs #ecmascript-6
Вопрос:
Я пытаюсь получить идентификаторы из массива объектов, используя приведенный ниже код
const opaqueMaterialSecondaryIds = Object.values(library?.layers).reduce((acc, opaque) => {
acc.push(...opaque.map(e => e.id));
return acc;
}, []);
и получение ошибки opaque.map
не является функцией, а объект выглядит так, как показано ниже
я не уверен, что я делаю неправильно с приведенным выше кодом. Может ли кто-нибудь предложить какие-либо идеи по этому поводу, заранее большое спасибо.
Комментарии:
1. можете ли вы опубликовать свой json здесь
2.
library?.layers?.map(item => item.id)
3. Зачем использовать сокращение для слоев, а не для карты? — Кажется, что непрозрачный является объектом — следовательно, нет метода map.
Ответ №1:
map()
является методом массива и не существует в объекте.
Каждый элемент в вашем library?.layers
является объектом, поэтому opaque.map
не является функцией.
Примечание 1: library?.layers
это уже объект, поэтому вам не нужно вызывать Object.values()
, но вместо этого вы можете напрямую использовать library?.layers?.reduce()
.
Примечание 2: если ваша цель — получить идентификаторы всех opaque
объектов, вы можете просто сделать:
const opaqueMaterialSecondaryIds = library?.layers?.map(opaque => opaque.id);
Ответ №2:
Если ваша структура такова, как она выглядит:
const layers = [
{
# other attributes,
id: 'id-1',
# other attributes,
},
{
...
},
];
Я думаю, все, что вам нужно, это это:
const layerIds = layers.map((l) => l.id);
console.log(layerIds);
# Output: ['id-1', 'id-2']