попытка получить идентификаторы из массива объектов и поместить эти идентификаторы в массив

#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']