javascript - 从数组转换为正确的对象格式

标签 javascript arrays object

在将数组转换为对象时,我知道扩展运算符和 Object.assign() 等选项,但是,我很难弄清楚如何以我需要的格式格式化最终对象。

我原来的数组是这样的:

let propsArray = [ { id: '1' },
  { 'name.first': 'john' },
  { 'name.last': 'smith' } ]

我想从此数据中得到的对象需要如下所示:

{
  "id" : 1,
  "name" : {
      "first" : "john",
      "last" : "smith"
  }
}

到目前为止,我已经尝试使用 object.assign(),最终在结果对象中添加数字作为属性键,这显然不是我想要的:

  let finalObj = Object.assign({}, propsArray);

我怎样才能得到我在这里需要的格式的结果对象?

最佳答案

您需要更深入地查看对象并获取拆分键并通过获取具有属性的对象或空对象来减少它们。最后赋值。

var data = [{ id: '1' }, { 'name.first': 'john' }, { 'name.last': 'smith' }],
    result = data.reduce((r, o) => {
        Object.entries(o).forEach(([k, v]) => {
            var keys = k.split('.'),
                last = keys.pop();
            keys.reduce((q, k) => q[k] = q[k] || {}, r)[last] = v;        
        });
        return r;
    }, {});

console.log(result);

关于javascript - 从数组转换为正确的对象格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977767/

相关文章:

c - 为什么我得到 "assignment makes pointer from integer without a cast"?

JavaScript - 从元素数据获取对象属性

javascript - Bootstrap 列的中心内容

javascript - 无法在 chrome-android 网站上执行 'play' : API can only be initiated by a user gesture. 上的 'HTMLMediaElement'

c++ - C 指针数组作用域和函数调用

arrays - 如何创建二维以上的 Pandas 数据框?

javascript - jQuery setInterval 滞后

javascript - 函数无法访问扩展程序中的 Chrome 存储值

javascript - JS : Remove object from nested array and return parent array

c++ - 带有引用参数的函数不能处理从其他函数返回的值