问题描述
这样的键数组
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
找到您需要设置其属性的对象,并设置它。