用“字符串值”指向“对象变量”并动态更新它?

时间:2017-03-14 06:59:47

标签: javascript arrays typescript

我试图用字符串值来实现动态变量。动态变量是嵌套对象。我为此目的使用了Javascript的eval方法。它按我的预期工作。

更确切地说,这是一个例子:

var transport = [];
transport.vehicles[0].car.brake[2] = ['diskbrake','drumbrake']; 
var myString = "transport.vehicles[0].car.brake[2]"; 
var valueOfArray = eval(myString); 
console.log(valueOfArray); 

这里,控制台日志为我提供了所需的输出。但是,当我将新项添加到“valueOfArray”变量时,我需要实现像'transport'变量的动态更新。

valueOfArray.push('air brakes'); 

当我推送新值时,它还应该更新'transport'对象。

任何指导或建议都会非常明显。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用lodash getset。 NPM模块link。 如果你想知道它是如何在纯JavaScript中做的,那么看看源代码。 get的源代码,set

示例:

let object1 = { 'a': [{ 'b': { 'c': 3 } }] };
 _.get(object1, 'a[0].b.c');
// => 3

_.get(object1, ['a', '0', 'b', 'c']);
// => 3

_.get(object1, 'a.b.c', 'default');
// => 'default'


let object2 = { 'a': [{ 'b': { 'c': 3 } }] };

_.set(object2, 'a[0].b.c', 4);
console.log(object2.a[0].b.c);
// => 4

_.set(object2, ['x', '0', 'y', 'z'], 5);
console.log(object.x[0].y.z);
// => 5

因此,如果您想动态获取和设置数组,您可以这样做。

let object = {};
let array = _.get(object, 'transport.vehicles[0].car.brake[2]', []);
array.push('air brakes');
_.set(object, 'transport.vehicles[0].car.brake[2]', array);

JS Fiddle