【问题标题】:Better way to handle operations with many variables?处理具有许多变量的操作的更好方法?
【发布时间】:2018-12-29 06:25:48
【问题描述】:

我有大约 30 个值存储为变量:

var a = 1,
    b = 2,
    c = 3,
    ...
    z = 26, 
    aa = 27,
    ab = 28;

我想扩展。我这样做是使用数组:

array = [a, b, c];
var scale = 5;

for (var i = 0; i < array.length; i++){
    array[i] = array[i] * scale; // Some simple arithmetic
}

要获得新的缩放值,我需要重新分配我的变量。

var a = array[0],
    b = array[1],
    c = array[2],
    ...
    z = array[26], 
    aa = array[27],
    ab = array[28];

这很麻烦,即使我使用解构赋值。有什么更好的方法来管理我拥有的所有信息?

【问题讨论】:

  • 数字和字符串是不可变的。你不能修改它们,你只能重新分配。这就是为什么人们喜欢像数组这样的数据结构。无需引用一堆单独的变量名即可轻松重新分配内容。
  • @PM77-1 查看我的编辑
  • this answer
  • @MarkMeyer 就我而言,我正在执行一堆三角函数;这些值指的是三角形边的角度和长度;出于这个原因,我想使用变量名。像字典这样的东西会更有意义吗?
  • @AlexJ 是的,对象将是一个不错的选择。如上所述,您可以通过数组传递变量并解构:[a, b, c] = [a,b,c].map(i =&gt; i*5),但这比仅使用数组或对象更麻烦。

标签: javascript pass-by-reference pass-by-value


【解决方案1】:

使用普通变量你不会找到更聪明的方法。我建议改用对象,因为数组是匿名的,因为您通过索引而不是名称访问内容:

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

然后你可以通过迭代和乘法

for (let key in groupA) {
    if (groupA.hasOwnProperty(key) {
         groupA[key] *= 5;
    }
}   

但您仍然可以单独访问每个字段

console.log(groupA.a);

【讨论】:

    【解决方案2】:

    无论如何你都必须重新分配,但你可以用更简洁的方式来做:

    let a = 1,
        b = 2,
        c = 3;
    
    ([a, b, c] = [a, b, c].map(v => v * 5));
    
    console.log(b);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多