在数组javascript中有键时如何更新嵌套键

在数组javascript中有键时如何更新嵌套键,javascript,javascript-objects,Javascript,Javascript Objects,我有一个要求,即在数组中获取嵌套的对象键。我有一系列的钥匙,比如 let keys = ["vehicleInformation", "VehicleBlock|1", "DriverAssociation|1", "DriverInvolvedAssociation"] 已经有一个JSON数据存储在一个变量中,我必须更新一个数据对象 data['vehicleInformation']['VehicleBlock

我有一个要求,即在数组中获取嵌套的对象键。我有一系列的钥匙,比如

let keys = ["vehicleInformation", "VehicleBlock|1", "DriverAssociation|1", "DriverInvolvedAssociation"]
已经有一个JSON数据存储在一个变量中,我必须更新一个数据对象

data['vehicleInformation']['VehicleBlock'][1]['DriverAssociation'][1]['DriverInvolvedAssociation'] = value;
有没有办法在javascript中实现这一点? 数据的初始值:

数据={}

预期结果:

data = {
  vehicleInformation: {
    VehicleBlock: [
      {},
      {
        DriverAssociation: [
          {},
          {DriverInvolvedAssociation: value},
        ],
      },
    ],
  },
};
keys=[“车辆信息”、“车辆锁1”、“驾驶员协会1”、“驾驶员参与协会”]
数据={
车辆信息:{
车锁:[
0,
{
司机协会:[
0,
{},
],
},
],
},
};
设值=42;
设keystlast=keys.flatMap(key=>key.split(“|”);
让lastKey=keystlast.pop();
keystlast.reduce((a,e)=>a[e],data)[lastKey]=值;

控制台日志(数据)
您的描述非常简单,但是如果您感兴趣的是更改对象中嵌套的变量,那么这看起来非常方便:为什么要使用
flatMap
,然后查找
lastKey
,然后
reduce
。当您可以使用
reduce
执行完全相同的操作时。CODE=>keys.reduce((acc,curr,index,arr)=>{const[key,i]=curr.split(|”);if(index==arr.length-1)返回(acc[key]=value);if(!i){acc=acc[key];}else{acc=acc[key][i];}控制台日志(acc);返回acc;},数据)@decpk当然可以,但我觉得我的方法更一般(而
flatMap
只用于满足OP对数组和对象键的人工分离,并为挖掘数据结构的一般操作做好准备)。取出最后一个键的逻辑是相同的——挖掘到下一个到最后一个键进行写入和挖掘到最后一个键进行读取的操作是完全等效的。