【问题标题】:Javascript = Building a variable name from stringsJavascript = 从字符串构建变量名
【发布时间】:2013-01-26 13:36:53
【问题描述】:

假设我有:

var acDeMa = [10, 20, 30, 40, 50];  
var test1 = 5;

var test2 = 7;

var test3 = 3;

var piece1;

var piece2;

var piece3;

if ( test1 == 5 )
{piece1 = "ac";}

if ( test1 == 7 )
{piece2 = "De";}

if ( test1 == 3 )
{piece3 = "Ma";}

然后我如何组合这些部分,将其识别为之前的数组,并将我的数组中的值复制到一个新数组中?

var finishedArray = (piece1 + piece2 + piece3);

基本上我想要下面的这种效果,但不必专门输入它的名称 (acDeMa):

var finishedArray = acDeMa;

我该怎么做呢?这样做的原因是因为我有大约 60 个数组,我一次比较两个。一些数组有共同点,所以与其有 60 个单独的“if”语句,我宁愿使用一些选择“if”语句将正确的数组名称拼凑在一起(巧妙地找到各种数组的共同点),然后将其用作我的数组。

不,我不想在新数组中包含数字 5、7 和 3。我想要finishedArray中的数字:10、20、30、40、50,但是因为这些数字每次都可能不同,我不想写:

var finishedArray = acDeMa;

var finishedArray = [10, 20, 30, 40, 50];

【问题讨论】:

    标签: javascript arrays string


    【解决方案1】:

    不是很推荐,但如果你在全局上下文中工作,你可以像这样使用窗口对象

    var finishedArray = window[piece1+piece2+piece3];
    

    这将创建对原始数组的引用。要获得单独的副本,请使用slice 方法

    var finishedArray = window[piece1+piece2+piece3].slice(0)
    

    【讨论】:

    • self 对象会更好
    • 您好,我是编程新手,还没有上过课程。如果我只是复制并粘贴其中的一行应该可以正常工作吗?还是需要我不知道的额外行?另外,为什么不推荐呢?谢谢:)
    • 我尝试使用你的命令,但它认为Window是一个变量,并抱怨它还没有被制作。
    【解决方案2】:

    从一个对象开始,而不是数组:

    var myArrays = { acDeMa : [10, 20, 30, 40, 50] }
    

    然后

    var finishedArray = myArrays[piece1 + piece2 + piece3];
    

    【讨论】:

    • 如何在 myArrays 中存储 60 多个数组? var myArrays = { acDeMa : [10, 20, 30, 40, 50], acDeMo : [1,4,5], acDoMa : [3,6,1], adDuMu : [6,3,9,99] } ?
    • 没用。 Unity 说:错误:BCE0051 运算符“+”不能与“对象”类型的左侧和“对象”类型的右侧一起使用。它指的是piece1 +piece2 ...等
    • 目前我有: var lookUpArrays = {fHighD : [100,300,340,347,400,440,447], fHillD : [110,200,240,247,310,382,389,510,582,589]}; var piece1 = "f" var piece2 = "HighD" var array1 : Array = new Array();数组 1 = [片 1 + 片 2];我也试过piece1.concat(piece2);但显然 concat 不是 Object 的成员。
    • 这样,array1 = lookUpArrays[piece1 + piece2] 应该可以工作了
    猜你喜欢
    • 2019-07-03
    • 2014-12-02
    • 2011-01-06
    • 2011-06-20
    • 1970-01-01
    • 2011-07-15
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多