【问题标题】:String pointer to array指向数组的字符串指针
【发布时间】:2013-09-19 13:58:19
【问题描述】:

是否可以使用字符串作为数组的名称持有者?

var myArray = ["a","b","c"];
var myPointer = "myArray";

console.log(myPointer[1]); //Should return "b"

【问题讨论】:

标签: javascript arrays object pointers


【解决方案1】:

是的,您可以这样做。我知道几种方法。

第一个是使用eval(),但我不打算讨论它,因为我认为eval() 是邪恶的。

一种方法是知道您正在使用哪个范围。如果您使用window 范围,您可以随时使用window[myPointer][1]。如果您使用不同的作用域,就像scope[myPointer][1] 一样简单。

如果你没有作用域或者不想毒化你的窗口作用域,你总是可以使用这样的:

function blork (pointer) {
    var arrays = {
        number : [ 0, 1, 2, 3, 4, 5 ],
        letters : [ 'a', 'b', 'c', 'd', 'e' ]
    }
    return arrays[pointer];
}

编辑:正如其他帖子中的 cmets 所述,这并不是真正的指针。我假设您想根据字符串值动态确定要使用的数组。

【讨论】:

  • 我要指出eval并指定不要使用它,你打败了我!
  • 只是为了进一步扩展 - 您可以使用字符串引用任何对象的任何成员。因此,如果您有var obj = {letters: ['a', 'b', 'c'], numbers: ['1', '2', '3']};,则可以使用obj.lettersobj.numbers 访问数组,或者等效地使用obj["letters"]obj["numbers"]。因此,您也可以拥有var pointer = "letters",并访问obj[pointer][1] 以获取'b'。在提到范围时,@MrP 是说你只需要让一些对象包含数组。
【解决方案2】:

我不确定您为什么要这样做,但您可以为此使用数组对象。

var myArray = ["a","b","c"];
var myObject = {"myArray": myArray};
var myPointer = "myArray";
console.log(myObject[myPointer][1]);

【讨论】:

    【解决方案3】:

    为了提高效率,原始类型,主要是字符串/数字/布尔值是按值传递的。函数、对象、数组等对象都是通过引用传递的。

    所以你可以把它变成一个对象,然后使用对它的引用。

    this question

    希望有帮助:)

    【讨论】:

      【解决方案4】:

      我不确定为什么在您的示例中它会返回“b”... 但我认为更好的方法是使用字典,实际上它是 JS 中非常常见的数据结构。

      所以在你的情况下:

      var myPoint = {
          'a': 'm',
          'b': 'y',
          'c': 'p',
      }
      

      等等..

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2013-09-27
        • 1970-01-01
        相关资源
        最近更新 更多