javascript - 从字符串创建嵌套数组
问题描述
我想使用具有这种结构的纯 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;
我能够创建对象部分,但是我在数组索引以及如何创建这种父子关系方面遇到了困难。
解决方案
新贡献者。如果您可以搜索,您会发现很多像您这样的问题。
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)
推荐阅读
- javascript - 如果找不到会引发错误的 JavaScript getter 函数与返回 null 的 JavaScript getter 函数如何命名?
- python - asyncpg.exceptions.DataError:查询参数 $1 的无效输入:217027642536(值超出 int32 范围)
- shell - 在命令行中使用 awk 将列添加到 csv 的末尾
- javascript - 延迟加载 Google reCAPTCHA JS 直到提交表单会导致更多挑战吗?
- java - 如何在“控制台”应用程序中清理 netbeans 的输出?
- rust - 如何在 Vec 中存储引用并稍后在 Rust 中使用它?
- python - 使用 BeautifulSoup 在 Python 中传递数组参数
- javascript - 如何使用 Cypress 上传 txt 文件?
- apache-nifi - 保护 minifi c++ 代理免受远程 NIFI
- c - 打印 ASCII 字母,10 总是打印在末尾