javascript 如何将array 转为对象

输入数组和输出对象的字段嵌套顺序,
输出:

  1. 转换后的对象, 嵌套对象的的最深一定是 {val: x}

输入

Array:

[
      {
            a: 'a1',
            b: 'b1',
            c: 'c1',
            val: 1
      },
      {
            a: 'a1',
            b: 'b1',
            c: 'c2',
             val: 2
      },
      {
            a: 'a1',
            b: 'b2',
            c: 'c1',
             val: 3
      },
       {
            a: 'a1',
            b: 'b2',
            c: 'c2',
            val: 4
      },
       {
            a: 'a2',
            b: 'b2',
            c: 'c2',
            val: 5
      }
]

Order:

['a', 'b', 'c']

输出 1:

{
     a1: {
           b1: {
                 c1: {
                       val : 1
                 },
                 c2: {
                       val: 2
                 }
           },
           b2: {
                 c1: {
                       val: 3
                 },
                 c2: {
                       val :4
                 }
           }
     },
     a2: {
           b2: {
                 c2: {
                    val:5
                 }
           }
     }
}

请问要如何实现,谢谢。

阅读 1.5k
1 个回答
const obj = {}
for (let i of arr) {
    let now = obj
    for (let n of order) now = now[i[n]] ??= {}
    now.val = i.val
}

arr.reduce((obj, i) => {
    order.reduce((now, n) => now[i[n]] ??= {}, obj).val = i.val
    return obj
}, {})

应该还有更简洁的方案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题