我试图用字符串值来实现动态变量。动态变量是嵌套对象。我为此目的使用了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'对象。
任何指导或建议都会非常明显。
谢谢。
答案 0 :(得分:1)
使用lodash get,set。 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);