使用变量名声明动态局部变量

时间:2018-06-13 22:33:15

标签: javascript node.js global-variables declare destructuring

在NodeJS中,我需要根据矩阵/对象的内容声明一长串变量。通常的方法是将它们添加到全局范围。

老路:

let map = { 'a': 1, 'b': 2, 'c': 3 };

for ( let v in map ){
  global[ v ] = map[ v ];
}

就我的目的而言,它们不可能是全球范围的。我想知道在ES6中是否有任何新方法/技巧可以实现这一目标。

例如,解构:

for ... // add the function to a local array (A)
let variableNames = [ 'a', 'b', 'c' ];

let [ ...variableNames ] = A;

如果不能做到这一点,那么我就必须考虑不同的方法。

修改

我忘了澄清变量名称是动态的,因此当前的解构方式不起作用。

我知道的唯一一个左手赋值允许变量的值用作新变量的名称是对象属性:

让o = {}; o [变量] ='某事';

我环顾四周,似乎我要求动态添加到功能上下文/本地范围,这是当前不允许的。

1 个答案:

答案 0 :(得分:0)

  

我需要根据a的内容声明一长串变量   矩阵/对象:

我会列出三种可能的解决方案。

解决方案1(使用数组解构):



let map = { 'a': 1, 'b': 2, 'c': 3 };

var [x, y, z] = Object.values(map);              // saving variables as x, y and z

console.log('x:'+ x + ', y:'+ y+', z:'+z);




解决方案2(使用对象解构):



let map = { a: 1, b: 2, c: 3 };

var {a:x, b:y, c:z} = map;      // saving variables as x, y and z

console.log('x:'+ x + ', y:'+ y+', z:'+z);

// or

var {a, b, c} = map;      // saving variables as a, b and c

console.log('a:'+ a + ', b:'+ b+', c:'+c);




解决方案3(使用本地对象而不是全局对象):



let map = { a: 1, b: 2, c: 3 };
let localObj = {}

Object.keys(map).forEach(key => localObj[key] = map[key])

console.log(localObj);