函数改变javascript数组的给定维度

时间:2015-09-05 19:17:21

标签: javascript

我有一个不断更改用户输入的数组。

例如:

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的情况下编写函数吗?

2 个答案:

答案 0 :(得分:2)

使用lodash's _.set

_.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, "\""));