@Ivan1331

Массив из массива обьектов используя деструктуризацию и spread?

Можно ли как то используя деструктуризацию и spread получить массив со значениями из массива обьектов.
const data=[
{id:1, name:"ganna",age:15},
{id:2, name:"anna",age:16},
{id:3, name:"petro",age:54}
];
const [...{name:name}]= data; // ну что то вроде этого
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Пишут, что так нельзя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Raxen
@Raxen
Lead Frontend Developer, Beeline
А что вы хотите куда спредить и деструктурировать?
const [...{name:name}] = data;
Здесь вы пытаетесь создать массив с именем переменной... тут нет имени переменной для массива,
Но если вы дернете без спреда,
const [{name: name}] = data;
то вам вернется значение поля name из первого элемента массива и запишется в переменную name, даже не объект, т.к. в данном случае([{name: name}]) происходит операция присваивания переменной 'name' значением поля 'name' из массива объектов, что на выходе даст строку с первым значением этого поля.

Вам нужен новый массив с ключами и значениями из другого массива, так? Это делается так -
const data=[
  {id:1, name:"ganna",age:15},
  {id:2, name:"anna",age:16},
  {id:3, name:"petro",age:54}
];

const arr = Object.values(data).map(item => [{ name: item.name }]); // Массив массивов с объектами
const arr2 = Object.keys(data).map(() => []); // Массив пустых массивов, чтоб можно было пушнуть элементы в 
                                              // массив. Еще можно так Array.from(data).fill([]);

Object.values(data).map((item, index) => arr2[index].push({ name: item.name }));

console.log(arr);
//=> [
//    [{name: 'ganna'}],
//    [{name: 'anna'}],
//    [{name: 'petro'}]
//. ]

console.log(arr2);
//=> [
//    {name: 'ganna'},
//    {name: 'anna'},
//    {name: 'petro'}
//. ]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы