我有这个对象:
var myObj = { abc:{a:1, b:2, c:3}, d:4 }
我希望它看起来像这样:
var newObj = { a:1, b:2, c:3, d:4, id:'abc' }
答案 0 :(得分:0)
假设数据只有一个深层次:
key: number
。使用函数 reduce
构建所需的输出和函数 Object.keys
,以获取元素跟随此情况的特定键结构id: {...}
。
var myObj = { abc:{a:1, b:2, c:3}, d:4 }
var result = Object.keys(myObj).reduce((a, k) => {
if (typeof myObj[k] === 'number') return {...a, [k]: myObj[k]}
return {...a, id: k, ...myObj[k]};
}, {});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

功能进行操作
var myObj = { abc:{a:1, b:2, c:3}, d:4 }
var result = Object.keys(myObj).reduce((a, k) => {
if (typeof myObj[k] === 'number') return Object.assign(a, {[k]: myObj[k]});
return Object.assign(a, {id: k}, myObj[k]);
}, {});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

这两种方法都使用 Computed property names
对象初始值设定项语法还支持计算属性名称。这允许您将表达式放在括号
[]
中,这将被计算并用作属性名称。这让人联想到property accessor语法的括号表示法,您可能已经习惯使用它来读取和设置属性。
例如:
{[k]: myObj[k]} // for example this will be converted to: {d: 4}