gpt4 book ai didi

javascript - 在 JavaScript 中分配动态左侧

转载 作者:行者123 更新时间:2023-11-28 19:53:57 25 4
gpt4 key购买 nike

假设我们有以下数组和对象:

var arr = [['foo', 0],['bar'],['baz', 'qux']],
arr2 = [3, 'quuuux', false],
obj = {
foo: [ 1, 2 ],
bar: 'quux',
baz: {
quuux: true
}
};

我想通过迭代 arr 和 arr2 使这些事情动态发生:

obj['foo'][0] = 3;
obj['bar'] = 'quuuux';
obj['baz']['qux'] = false;

有没有办法在不使用 eval() 的情况下实现这一点?另外,即使在这种情况下,eval() 也是邪恶的吗?

编辑:

  1. arr2的值来自用户输入,但这只是一个内部工具,因此安全问题不是很重要。

  2. arr 的元素可以具有任意长度,例如

    obj['foo'][0]['bar'][2]['qux'] = 'quux';

应该可用。

最佳答案

eval() 并不是邪恶的,它只是几乎总是错误的工具,你在这里不需要它。实际上,考虑到您的输入格式,我不确定它在这里有何帮助。

嵌套循环可以解决您显示的输入数据的问题:

var tmp, i, j;
for (i = 0; i < arr.length; i++) {
tmp = obj;
for (j = 0; j < arr[i].length - 1; j++) // loop to second last item
tmp = tmp[arr[i][j]]; // in sub array
tmp[arr[i][j]] = arr2[i];
}

演示:http://jsfiddle.net/snmQ6/

请注意,这将在最低级别创建新属性,例如 baz 中的新 qux 属性,但不会在中创建新的嵌套数组/对象当您的起始 obj 时,它假定它们已经存在,并且您的 arr 输入指定了适当的索引值来工作到较低级别的路径。我将留下适当的条件逻辑来创建嵌套对象作为读者的练习......

关于javascript - 在 JavaScript 中分配动态左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com