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

Ade*_*emo 2 javascript arrays object

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

我的原始数组如下所示:

let propsArray = [ { id: '1' },
  { 'name.first': 'john' },
  { 'name.last': 'smith' } ]
Run Code Online (Sandbox Code Playgroud)

我要从此数据中获取的对象应如下所示:

{
  "id" : 1,
  "name" : {
      "first" : "john",
      "last" : "smith"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  let finalObj = Object.assign({}, propsArray);
Run Code Online (Sandbox Code Playgroud)

我如何才能将生成的对象格式化为所需的格式?

Nin*_*olz 6

您需要更深入地了解该对象,并通过使用具有属性的对象或空对象来获取分割后的键并减少它们。最后分配值。

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);
Run Code Online (Sandbox Code Playgroud)