我有一个不断更改用户输入的数组。
例如:
user = ['a','b',['c','d'],'e',['f','g',['h','i'],'j']]
我还有一个指向指向何处进行更改的指针。
pointer = [1] change value at user[1]
pointer = [2,1] change value at user[2][1]
pointer = [4,2,2] change value at user[4][2][2]
尺寸大多不一样,可以超过10个。 现在我正在制作一个字符串,然后是eval。 我可以在不使用eval的情况下编写函数吗?
答案 0 :(得分:2)
_.set(user, [4,2,1], '!')
或者,如果你不想要lodash,你可以自己实现这个。
function setDeep(obj, path, val) {
if (path.length === 1)
obj[path[0]] = val;
else
setDeep(obj[path.shift()], path, val)
}
// then use: setDeep(user, [4,2,1], 'something').
请注意,如果指定的密钥不存在,则会抛出此版本。这也不是清晰度和可维护性的一个很好的例子,所以你需要改进它,但这是一个很好的起点 - 它可以做你想要的。
如果你想要而不是设置 - 使用lodash的_.get
或自己实现它,它将与我的setDeep
非常相似。
答案 1 :(得分:0)
我假设用户的输入是一个字符串而不是像你的例子中的数组,因为你提到了eval,否则它是一个完全不同的方法。
var user = "['a','b',[4,'d'],'e',['f','g',['h','i'],'j']]";
JSON.parse(user.replace(/'/g, "\""));