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中“拉出”obj.user.name。
答案 0 :(得分:2)
试试这个:
data.map(obj => ({person_name: obj.user.name,...obj}))
对象开头的{
被解释为块的开头而不是对象。
您可以在MDN
上详细了解相关信息修改强> 正如Pawel所提到的,使用包含对象的spread运算符不适用于纯es6,您需要使用此提案中的特定转换:https://github.com/tc39/proposal-object-rest-spread
答案 1 :(得分:1)
你不能传播这样的对象(在Object.assign
抛出data.map(obj => Object.assign({person_name: obj.user.name}, obj ));
。
我会用enum Status: Int {
case online = 0
case offline = 1
case na = 2
}
编写它:
// enum as string
let enumName = "\(Status.online)" // `online`
// enum as int value
let enumValue = Status.online.rawValue // 0
// enum from int
let enumm = Status.init(rawValue: 1)
答案 2 :(得分:0)
首先,如果要使用箭头函数创建对象,则必须将花括号括在括号中:
data.map(obj => ({ foo: 'bar' }));
否则,JS认为花括号是函数体,并且语法错误。
其次,你不能在对象文字中使用spread运算符。只能在调用函数时使用数组文字或解构时使用它。
答案 3 :(得分:0)
使用babel,您可以使用rest syntax (parameters) ...
直接获取对象和商店名称属性的其余部分。
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; }

答案 4 :(得分:0)
您可以使用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; }