javascript 将数组中的对象及其子对象转换为map

rhfm7lfc  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(237)

我有一个这样的对象数组:

let array = [
  {
    "A": [
      {
        "X": "abc123",
        "Y": "abc213",
        "Z": "xyz123"
      },
      {
        "X": "xyz7",
        "Y": "wqr",
        "Z": "dasd"
      }
    ]
  },
  {
    "B": [
      {
        "X": "sadasd",
        "Y": "asdasd",
        "Z": "sadasd"
      },
      {
        "X": "ffff531",
        "Y": "asdddz",
        "Z": "xx11155"
      }
    ]
  }
]

我想把它转换成map,外键是A/B,但是内键应该是X的值,指向对象本身的值。

{
    "A": {
      
        "abc123":{
           "X": "abc123",
           "Y": "abc213",
           "Z": "xyz123"
        
      },
        "xyz7": {
          "X": "xyz7",
          "Y": "wqr",
          "Z": "dasd"
        
      }
    
  },
    "B": {
      
        "sadasd":{
          "X": "sadasd",
          "Y": "asdasd",
          "Z": "sadasd"
         },
      
        "ffff531":{
           "X": "ffff531",
           "Y": "asdddz",
           "Z": "xx11155"
        }
      
     }
}

我试着使用reduce方法,但我只能在没有嵌套对象的情况下将其转换为Map,而不是嵌套对象。
我该怎么做?使用Array.prototype.reduce方法是否可能?

s6fujrry

s6fujrry1#

你可以构建一个单独的对象,然后用需要的键创建嵌套对象。

const
    data = [{ A: [{ X: "abc123", Y: "abc213", Z: "xyz123" }, { X: "xyz7", Y: "wqr", Z: "dasd" }] }, { B: [{ X: "sadasd", Y: "asdasd", Z: "sadasd" }, { X: "ffff531", Y: "asdddz", Z: "xx11155" }] }],
    result = Object.fromEntries(Object
        .entries(Object.assign({}, ...data))
        .map(([k, v]) => [k, Object.fromEntries(v.map(o => [o.X, o]))]));

console.log(result);

相关问题