【问题标题】:Using a variable value to call an array element使用变量值调用数组元素
【发布时间】:2012-01-12 22:05:40
【问题描述】:

我有一个包含数组名称的字符串变量。我想做的是访问该数组的一个元素。并将其写入另一个变量。我该怎么做?

var sample = new Array();
sample[0] = 'one';
sample[1] = 'two';

var arrayname = "sample";
var number = arrayname[1];  ///  Something like this, although I realize this doesn't work for obvious reasons...

我已经阅读了有关将变量值用作函数的其他问题,但我不理解这种方法,或者即使这适用于上述情况。

提前致谢!!

【问题讨论】:

标签: javascript arrays


【解决方案1】:

应该这样做:

    var sample = new Array();
    sample[0] = 'one';
    sample[1] = 'two';

    var arrayname = "sample";
    var number = window[arrayname][1];
    alert(number);

【讨论】:

  • 但前提是你在窗口范围内运行它,而不是在函数内。
  • 绝对...据我所知,如果您在函数中创建了一个局部变量,则无法仅使用字符串名称来获取它。如果 JS Super Guru 可以告诉我,我真的很想知道!
【解决方案2】:

在 JavaScript 中没有通用的方法可以完全执行您在其中设置的操作,但是您可以使用字符串变量以动态方式访问对象属性。

var objArr = { array1: [], array2: [] };

现在您可以使用值为“array1”或“array2”的变量来获取这些数组:

var name = "array2";
objArr[name].push(14);

您在 JavaScript 中不能做的是通过动态名称访问局部变量,或者如果您愿意,可以间接访问。如果您有全局上下文的名称,您可以通过这种方式访问​​ global 变量,在浏览器中是 window 对象:

window[ name ].push(17);

但是没有办法为本地范围获得类似的名称。

edit — @Neal 指出(并且被无情地否决)eval() 可以做你想做的事,但是很多人建议远离eval(),除非这是绝对不可避免的(这真的很少见)。我已经训练自己很好地忽略它,以至于当被问到这样的问题时我总是忘记它(奇怪的是,在 SO 上经常出现这种情况,尽管在我的编程实践中我从未发现自己想要这样做)。

【讨论】:

  • 从技术上讲,eval 应该能够完全做他想做的事,但我完全理解你为什么不想告诉他:)
  • @missingno 正如我在编辑中所说,我实际上从未想过eval() 所以我只是忘记了:-)
  • @Pointy 我什至在我的帖子中说它不是最好的方法。我应该加粗它:-P
【解决方案3】:

你可以使用类似的东西:

var arrayName = "sample",
    number = window[arrayname][1];

【讨论】:

    【解决方案4】:

    我的意思是你可以使用 eval,但这不是最好的方法:

    eval("var arrayname = sample");
    var number = arrayname[1];  
    

    为什么不直接做:

    var arrayname = sample;
    var number = arrayname[1];  
    

    【讨论】:

    • 我不喜欢eval() 比其他任何人都多,但这并不值得一票否决;它在技术上是正确的:-)
    【解决方案5】:

    如果它在全局范围内,您可以通过以下方式访问您的数组

    var sample = new Array();
    sample[0] = 'one';
    sample[1] = 'two';
    var arrayname = "sample";
    var number = (window[arrayname])[1]
    

    【讨论】:

      【解决方案6】:
      var sample = new Array();
      sample[0] = 'one';
      sample[1] = 'two';
      var obj = {"sample": sample}
      
      var arrayname = "sample";
      var number = obj[arrayname][1];
      

      【讨论】:

        【解决方案7】:

        想不通……

        首先声明一些全局变量

        var buf;
        

        然后

        var sample = new Array();
        sample[0] = 'one';
        sample[1] = 'two';
        
        var arrayname = "sample";
        eval('buf=' + arrayname + ';');
        var number = buf[1];
        

        该死的不受欢迎的方式,但做你想做的......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-06
          • 2017-07-08
          • 2020-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-08
          相关资源
          最近更新 更多