data.map(obj =>
{person_name: obj.user.name,
...obj})
Почему код выше не прошел?
мои данные выглядят так
[{user:{name:'hello'},age:1},{user:{name:'world'},age:1,{user:{name:'another_name'},age:1]
Я хочу "вытащить" obj.user.name из вложенного объекта.
С babel вы можете использовать синтаксис (параметры) для отдыха ...
для получения остальной части объекта и сохранения свойства имени напрямую.
var data = [{ user: { name: 'hello' }, age: 1 }, { user: { name: 'world' }, age: 1 }, { user: { name: 'another_name' }, age: 1 }];
console.log(data.map(({ user, ...obj }) => Object.assign(obj, { person_name: user.name })));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы не можете распространять такой объект (бросает SyntaxError
на ...
Я бы написал его с помощью Object.assign
:
data.map(obj => Object.assign({person_name: obj.user.name}, obj ));
Попробуй это:
data.map(obj => ({person_name: obj.user.name,...obj}))
{
В начале объекта интерпретировался как начало блока вместо объекта.
Вы можете узнать больше об этом на MDN
EDIT: Как отметил Павелл, использование оператора распространения с объектами не работает с чистым es6, вам нужно использовать конкретное преобразование, как в этом предложении: https://github.com/tc39/proposal-object-rest-pread
...
Прежде всего, если вы хотите создать объект с помощью функции стрелки, вам нужно обернуть фигурные скобки в скобках:
data.map(obj => ({ foo: 'bar' }));
В противном случае JS считает, что фигурные скобки являются телом функции, и вы получаете синтаксическую ошибку.
Во-вторых, вы не можете использовать оператор спреда в объектных литералах. Его можно использовать только при вызове функции, используя литерал массива или при деструктуризации.
Вы можете использовать Array.prototype.map() и напрямую вернуть желаемый объект:
const data = [{user: {name: 'hello'},age: 1}, {user: {name: 'world'},age: 1},{user: {name: 'another_name'},age: 1}];
const result = data.map(obj => {
return {
person_name: obj.user.name,
age: obj.age
};
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...obj
считается?