let name1, name2, name3;
let pid = 1;
动态根据 pid 的值给 name1,name2,name3 赋值
当 pid=1 的时候给 name1 赋值, pid=2 的时候给 name2 赋值 。
- 第一种解决方案
使用if...else
if (pid == 1) {
name1 = 11
} else if (pid == 2) {
name2 = 22
} else if (pid == 3) {
name3 = 3
}
- 第二种解决方案
switch (pid) {
case 1:
name1 = 1
break;
case 2:
name2 = 2
break;
default:
break;
}
- 第三种解决方案
let nameMap = {
name1: '',
name2: '',
name3: '',
}
let pid = 2
nameMap['name' + pid] = '123'
console.log(nameMap.name1);
- 第四种解决方案
let pid = 2;
let nameMap = {};
nameMap[`name${pid}`] = 666
console.log(nameMap[`name${pid}`]);
- 第五种解决方案
let name1, name2, name3;
let pid = 2;
let arr = [1, 2, 3]
eval(`name${pid} = arr`)
console.log(name2);
- 第六种解决方案,掘金大神写的,据说这个叫柯里化
const assignValue = (context) => (pid) => (value) => {
let names = {
1: 'name1',
2: 'name2',
3: 'name3',
}
context[names[pid]] = value;
}
let pid = 2;
let value = "666";
let context = {
name1: null,
name2: null,
name3: null,
}
assignValue(context)(pid)(value)
console.log(context.name1);
console.log(context.name2);
console.log(context.name3);
- 第七种解决方案
那就是三元表达式了,如果变量多的话不适用,就不写了
总结:以上方法来自掘金大神们提供,个人感觉还是第五种方法简单