猿问

创建具有元素路径数组的嵌套数组

我有这个数组:


var array ={data: [

        { id:'1',

          name:'first',

          data:[]

 }]}

我有这个路径:path = ['3','1','2']; 我如何根据路径动态推送数据并创建这个:


  array.data= myData;

  array.data[3].data= myData;

  array.data[3].data[1].data =myData;

  array.data[3].data[1].data[2].data= myData;

myData 存储来自服务器的数据并每次更改


我的数据示例


var myData = 

{ id:'5',

          name:'abc',

          data:[]

 },

{ id:'7',

          name:'def',

          data:[]

 }

想要的结果应该是这样的:我希望能够像上面那样创建这个数组,并且可以像上面那样访问数据。


var array ={data: [

        { id:'1',

          name:'first',

          data:[]

 },{ id:'2',

          name:'first',

          data:[]

 },

{ id:'3',

          name:'first',

          data:[]

 },

{ id:'4',

          name:'first',

          data:[

                { id:'5',

                  name:'first',

                  data:[]

                },

                { id:'6',

                 name:'first',

                 data:[

                        { id:'7',

                          name:'first',

                          data:[]

                         },

                       { id:'8',

                         name:'first',

                         data:[

                                { id:'8',

                                  name:'first',

                                 data:[]

                                },

                                { id:'8',

                         name:'first',

                         data:[]

                     }]

                     }]

                }]

 }]}


GCT1015
浏览 138回答 2
2回答

有只小跳蛙

如果我正确理解您的问题,您希望动态构造一个对象(即result如下所示),即myData从提供的path数组中嵌套对象的克隆。一种方法array.data[3].data[1].data[2].data是通过数组上的reduceRight()方法产生所需的访问方法(即)path,如下所示:const myData = { id: '1', name: 'first' };const path = ['3', '1', '2'];const array = {   data : path.reduceRight((acc, part) =>     ({ [part] : { data : { ...acc, ...myData } }}), {}) }console.log(array.data[3].data);console.log(array.data[3].data[1].data);console.log(array.data[3].data[1].data[2].data);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答