Создать массив объектов из заданного ключа массива

#javascript #arrays #reactjs #lodash

#javascript #массивы #reactjs #Lodash

Вопрос:

У меня есть такой массив.

 const test = [
    { student: { id : '1', Name: 'A' }, marks: {
 id: '2', Name: 'B'
} }, 
    { student: {
 id : '3', Name: 'C' }, marks: { id: '4', Name: 'D' } }
]
  

Теперь, из этого массива объектов, я пытаюсь создать два разных массива, которые будут иметь отдельные ключи student и marks .

 const student = [{"student":{"Id": {value: "A"}}}, {"student":{"Id": {value: "B"}}}]
  

и для меток

 const marks = [{"marks":{"Id": {value: "C"}}}, {"marks":{"Id": {value: "D"}}}]
  

Итак, вот что я попробовал

 test.map((index,item) => {
    return [item.student] 
  })
  

может ли кто-нибудь помочь мне с этим?

Спасибо.

Комментарии:

1. В общем, это «плохая практика» (особенно при работе с базами данных, такими как MongoDB), чтобы начинать изменять структуру данных и имена вложенности свойств ( id на Id ) без большого значения или семантики. В вашем случае перед изменением console.log(test[0].student.id) (возврат 1 ). После console.log(student[0].student.Id.value) (Вернуть A , а не 1 ).

Ответ №1:

Вы хотите, чтобы возвращался новый объект, а не вложенный массив.

Далее используется деструктурирование для упрощения возвращаемого объекта

 const test = [
    { student: { id : '1', Name: 'A' }, marks: {
id: '2', Name: 'B'
} }, 
    { student: {
id : '3', Name: 'C' }, marks: { id: '4', Name: 'D' } }
]

const students = test.map(({student}) => ({student}))
const marks = test.map(({marks}) => ({marks}))

console.log(students)
console.log(marks)  

Комментарии:

1. да, это будет работать, но я также должен добавить новое свойство, в котором будет значение, а не идентификатор и имя.

2. а также как мне вернуть оба новых объекта из одной и той же функции map.

3. просто чтобы упростить мой ответ в комментарии, используйте другую карту(). Или создайте два массива, которые затем используйте forEach() , и поместите каждый объект в связанный массив

4. Что касается других свойств ...map(({student}) => ({student, someProperty: someValue}));

5. Таким образом, это удалит существующие значения и добавит новое свойство правильно