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

问题描述

我有一个要求,我需要在数组中获取嵌套的对象键。我有一个

这样的键数组
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 = ["vehicleInformation","VehicleBlock|1","DriverAssociation|1","DriverInvolvedAssociation"]
data = {
  vehicleInformation: {
    VehicleBlock: [
      0,{
        DriverAssociation: [
          0,{},],},};

let value = 42;
let keysToLast = keys.flatMap(key => key.split("|"));
let lastKey = keysToLast.pop();
keysToLast.reduce((a,e) => a[e],data)[lastKey] = value;
console.log(data);

数组键就像对象键一样只是字符串,没有理由区别对待它们(因此flatMap)。然后只需reduce找到您需要设置其属性的对象,并设置它。