如何仅使用一个对象中的对象转换对象

时间:2018-03-18 16:01:38

标签: javascript object

我有这个对象:

var myObj = { abc:{a:1, b:2, c:3}, d:4 }

我希望它看起来像这样:

var newObj = { a:1, b:2, c:3, d:4, id:'abc' }

1 个答案:

答案 0 :(得分:0)

假设数据只有一个深层次:

  • 检查类型编号以添加那种密钥对值key: number
  • 否则,添加对象的id及其密钥对值。

使用函数 reduce 构建所需的输出和函数 Object.keys ,以获取元素跟随此情况的特定键结构id: {...}

使用 Spread syntax (...)

的方法



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; }




使用 Object.assign

功能进行操作



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}