【问题标题】:How to create variable with concatenation in javascript?如何在javascript中创建具有连接的变量?
【发布时间】:2015-08-03 10:26:08
【问题描述】:

我的代码很长,想简化它。我不认为我们可以使用字符串连接来创建不同的变量名。有没有其他办法。

If(Something){
    var a = some.Test1.x;
    var b = some.Test1.y;
    var c = some.Test1.z;
    var d = some.Test1.p;
}

If(SomethingElse){
    var a = some.Test2.x;
    var b = some.Test2.y;
    var c = some.Test2.z;
    var d = some.Test2.p;
}

If(OneMore){
    var a = some.Test3.x;
    var b = some.Test3.y;
    var c = some.Test3.z;
    var d = some.Test3.p;
}

可能会创建一些这样的功能,我知道这是不对的,但有类似的东西。

function test(s){
  a = some.s.x;
  b = some.s.y;
  c = some.s.z;
  d = some.s.p;
}

【问题讨论】:

  • 请注意,您可以将o.foo 替换为o["foo"],即您可以通过文字或字符串访问foo 字段/o 的成员("foo" 可能是字符串)
  • 此问题与 SO 无关,应移至CodeReview

标签: javascript oop variables object javascript-objects


【解决方案1】:

你可以使用类似数组的语法

function test(s) {
    var a,b,c,d;
    if (s === Something) {
        test = "Test1";
    }
    if (s === SomethingElse) {
        test = "Test2";
    }
    if (s === OneMore) {
        test = "Test3";
    }

    a = some[test].x;
    b = some[test].y;
    c = some[test].z;
    d = some[test].p;
}

这是功能等效但从未使用过的 eval 语法的改进版本:

eval("a = some."+test+".x");

【讨论】:

  • 所以如果我有类似 random.x.Test1.q 的东西,我会根据你的回答做 some.x[test].q
  • @Nakib 不要忘记在这个例子中处理test === undefined
【解决方案2】:
function test(index){
  t = some["Test" + index];

  a = t.x;
  b = t.y;
  c = t.z;
  d = t.p;
}

和执行:

test(1); test(2); test(3)

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2013-08-27
    • 2020-09-16
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多