我想用这种方式创建一个对象:
var new_obj = {},
array_path = '',
the_value = 3;
array_path = '[\''fruits'\'][\''banana'\'][\''value'\']'; // unknown on runtime
eval('new_obj' + array_path + ' = ' + the_value + ';');
不幸的是,在缩小之后,' new_obj'参数不匹配new_obj变量。我无法找到另一种方法来做我想要的事情,因为在运行时我不知道array_path结构。我有什么想法可以避免使用eval()函数吗?
答案 0 :(得分:0)
如果我正确地提出你的问题,这可能就是你要找的东西:
var set_value = function(obj, path, value) {
var limit = path.length;
// You might want to check if limit is 0 here.
for (var i = 0; i < limit-1; i++) {
var key = path[i];
if (!obj.hasOwnProperty(key)) {
// Depending on your case you might throw an error
// here or do something else
obj[key] = {};
}
obj = obj[key];
}
obj[path[limit-1]] = value;
};
用法:
var new_obj = {},
array_path = ['foo', 'bar', 'test'],
the_value = 3;
set_value(new_obj, array_path, the_value);
所以你要做的就是将array_path
转换为上面的格式。如果您将其作为字符串接收,那么一些正则表达式可能会有所帮助。虽然如果您可以控制源,那么只需确保它是一个JSON数组。