js中如何将对象转成树

let origin ={
    'f:123': {
         deviceName: "设备一",
         name: "机器一",
         symbol: "um",
         tags: [],
         type: "float",
         fileName:'文件1'
     },
     'f:456': {
          deviceName: "设备二",
          name: "机器一",
          symbol: "um",
          tags: [],
          type: "float",
          fileName:'文件2'
    },
     'f:789': {
          deviceName: "设备二",
          name: "机器二",
          symbol: "um",
          tags: [],
          type: "float",
          fileName:'文件2'
    }
}

最终结果 result = [
{
  fileName: '文件1',
  children: [{
    deviceName: "设备一",
    children: [{
      name: "机器一",
      symbol: "um",
      tags: [],
      type: "float",
    }]
  }]
}, 
{
  fileName: '文件2',
  children: [{
    deviceName: "设备二",
    children: [{
      name: "机器一",
      symbol: "um",
      tags: [],
      type: "float",
    },
    {
      name: "机器二",
      symbol: "um",
      tags: [],
      type: "float",
    }]
  }]
}
];

暴力求解,多层循环嵌套

虽然不知道为什么要这样设计数据,不过就这样吧

    let origin = {
        'f:123': {
            deviceName: "设备一",
            name: "机器一",
            symbol: "um",
            tags: [],
            type: "float",
            fileName: '文件1'
        },
        'f:456': {
            deviceName: "设备二",
            name: "机器一",
            symbol: "um",
            tags: [],
            type: "float",
            fileName: '文件2'
        },
        'f:789': {
            deviceName: "设备二",
            name: "机器二",
            symbol: "um",
            tags: [],
            type: "float",
            fileName: '文件2'
        }
    }
    //对象树
    let res = {}
    for (let key in origin) {
        const { fileName, deviceName, name, ...other } = origin[key]
        res[fileName] = res[fileName] ? res[fileName] : { fileName, children: {} }
        const { children } = res[fileName]
        children[deviceName] = children[deviceName] ? children[deviceName] : { deviceName, children: {} }
        const { children: children2 } = children[deviceName]
        children2[name] = children2[name] ? children2[name] : { name, ...other }
    }
    //对象树转化为数组型
    const temp3 = []
    for (let key in res) {
        const { children } = res[key]
        const temp2 = []
        for (let key2 in children) {
            let { children: children2 } = children[key2]
            const temp = []
            for (let key3 in children2) {
                temp.push(children2[key3])
            }
            children[key2]['children'] = temp
            temp2.push(children[key2])
        }
        res[key]['children'] = temp2
        temp3.push(res[key])
    }
    res = temp3
    console.log(res)

记得给个采纳啊