根据变量后缀,动态改变变量的值

76 阅读1分钟
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);
  • 第七种解决方案
那就是三元表达式了,如果变量多的话不适用,就不写了

总结:以上方法来自掘金大神们提供,个人感觉还是第五种方法简单