首页 > 解决方案 > 从字符串创建嵌套数组

问题描述

我想使用具有这种结构的纯 JS 从字符串创建一个数组:

vehicles:[ 
  {
    information:{brand: audi, model: a3, year: 2007},
    characteristics: {motor: CDI, potency: X} 
  },
  {
    information:{brand: bmw, model: x3, year: 2002},
    characteristics: {motor: TDI, potency: Y} 
  }
]

我的弦是

vehicles[0].information.brand = audi;
vehicles[0].information.model = a3;
vehicles[0].information.year = 2007;
vehicles[0].characteristics.motor = CDI;
vehicles[0].characteristics.potency = X;

vehicles[1].information.brand = bmw;
vehicles[1].information.model = x3;
vehicles[2].information.year = 2002;
vehicles[2].characteristics.motor = TDI;
vehicles[2].characteristics.potency = Y;

我能够创建对象部分,但是我在数组索引以及如何创建这种父子关系方面遇到了困难。

标签: javascriptarraysmultidimensional-arrayecmascript-6nested

解决方案


新贡献者。如果您可以搜索,您会发现很多像您这样的问题。

let input = `vehicles[0].information.brand = audi;
vehicles[0].information.model = a3;
vehicles[0].information.year = 2007;
vehicles[0].characteristics.motor = CDI;
vehicles[0].characteristics.potency = X;

vehicles[1].information.brand = bmw;
vehicles[1].information.model = x3;
vehicles[2].information.year = 2002;
vehicles[2].characteristics.motor = TDI;
vehicles[2].characteristics.potency = Y`.replace(/\n/g, "").split(";")


function update(obj, keys, value) {
    const lastProp = keys.pop();
    keys.reduce((obj, key, i, arr) =>
        obj[key] ??= Number.isInteger(+arr[i + 1]) ? [] : {}, obj)[lastProp] = value;
    return obj;
}

let obj = {};

for (const str of input) {
    let [key, value] = str.split(" = ");
    update(obj, key.match(/\w+/g), value)
}

console.log(obj)


推荐阅读