我正在努力使用 Javascript 对象操作来输出所需的结果

我有一组对象,我想将它们分组为特定的键和格式。


这是我拥有的对象:


      {

         "id": "98765",

         "things": [{

                 "clientId": "123456",

                 "val": "file1",

                 "cmpId": "54353"

             },

             {

                 "clientId": "1234",

                 "val": "file2",

                 "cmpId": "3453"

             },

             {

                 "clientId": "1234",

                 "val": "file3",

                 "cmpId": "5433"

             }

         ]

     };

我的目标是尝试将对象转换为以下格式


{  

"id":"98765",

"things":{  

   "123456":{  

      "54353":{  

         "val":"file1"

      }

   },

   "1234":{  

      "3453":{  

         "val":"file2"

      },

      "5433":{  

         "val":"file3"

      }

   }

}

}

我已经设法使“clientId”成为对象的键,但我正在努力使活动 ID 嵌套在该对象中。这是我试过的代码



     const a = obj.things.reduce((ac, {clientId, ...rest})=> (ac[clientId] = rest, ac), {})

     console.log(a);

这给出了以下格式,显然没有实现 cmpId 嵌套,但也摆脱了我的一个对象,因为 clientId 是重复的。我对如何在没有大量代码来实现它的情况下实现非常简洁的东西感到有点迷茫。


{

'1234': { val: 'file3', cmpId: '5433' },

'123456': { val: 'file1', cmpId: '54353' }

}


拉莫斯之舞
浏览 170回答 3
3回答

四季花海

你很接近。使用Array#reduce是正确的方法。您只需要更改ac[clientId] = rest为您想要的结构:const obj = {         "id": "98765",         "things": [{                 "clientId": "123456",                 "val": "file1",                 "cmpId": "54353"             },             {                 "clientId": "1234",                 "val": "file2",                 "cmpId": "3453"             },             {                 "clientId": "1234",                 "val": "file3",                 "cmpId": "5433"             }         ]     };     obj.things = obj.things.reduce( ( res, { clientId, cmpId, ...rest } ) => {  res[clientId] = { ...res[clientId], [cmpId]: rest };  return res;}, { } );console.log( obj );

慕丝7291255

你快到了,你还需要获取cmpId然后检查是否已经有一个对象clientId,这里是一个例子:const input = {  "id": "98765",  "things": [{      "clientId": "123456",      "val": "file1",      "cmpId": "54353"    },    {      "clientId": "1234",      "val": "file2",      "cmpId": "3453"    },    {      "clientId": "1234",      "val": "file3",      "cmpId": "5433"    }  ]};input.things = input.things.reduce((a, {  clientId,  cmpId,  ...rest}) => {  if (a[clientId]) {    a[clientId][cmpId] = rest;  } else {    a[clientId] = {      [cmpId]: rest    };  }  return a;}, {});console.log(input);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript