【问题标题】:variable as index in an associative array - Javascript变量作为关联数组中的索引 - Javascript
【发布时间】:2011-05-04 17:23:39
【问题描述】:

我正在尝试创建一个关联数组,创建一个空数组,然后添加一个 (indexName -> value) 对:

var arrayName = new Array;

arrayName["indexName"] = value;

// i know i can also do the last line like this:

arrayName.indexName = value;

当我将值分配给indexName 时,我希望indexName 是动态的并且是变量的值。所以我尝试了这个:

arrayName[eval("nume")] = value;

地点:

var var1 = "index";
var var2 = "Name";

var nume = '"' + var1 + var2 + '"'; 

但是:alert(arrayName["indexName"]); 不返回“值”...它说“未定义”

我有什么遗漏吗? (我不熟悉eval());如果我尝试的方法是死路一条,还有其他方法可以使关联数组值的索引名称动态化吗?

【问题讨论】:

    标签: javascript associative-array


    【解决方案1】:

    您在寻找variableName = 'bla'+'foo'; arrayRef[variableName] = 'something'; 吗?

    即便如此,您也应该使用对象字面量。 x = {}; x[variablename] = 'blah';

    【讨论】:

      【解决方案2】:

      起初我认为你不需要一个真正的数组对象来做你需要的事情,你可以使用一个普通的对象。

      您可以简单地使用括号表示法来访问属性,使用变量的值:

      var obj = {};
      var nume = var1 + var2;
      obj[nume] = value;
      

      数组只是对象,“关联数组”的概念可以通过使用简单对象来实现,对象是包含值的属性的集合。

      当您需要存储数字索引时,真正的数组很有用,它们会在您分配索引或 push 为其分配值时自动更新其 length 属性。

      【讨论】:

      • 谢谢...数组引入了一些复杂的方括号内的引号
      【解决方案3】:

      使用arrayName[var1+var2]

      注意arrayName.vararrayName["var"] 相同——只是语法糖。第二种形式主要用于处理您面临的问题 - 动态对象键和非字母数字键(想想arrayName[".eval()"];这是一个完全合法的对象键,与 javascript 无关eval()函数)

      【讨论】:

      • @bogdan 如果适合您的需要,请接受答案:)
      【解决方案4】:

      您想要一个具有相同bracket notaiton 的普通对象,如下所示:

      var arrayName = {};
      arrayName["indexName"] = value;
      

      【讨论】:

        【解决方案5】:

        你会使用对象来做到这一点:

        var hash = {}
        hash["foo"] = "foo";
        hash.bar    = "bar";
        // This is the dynamic approach: Your key is a string:
        baz         = "baz"
        hash[baz]   = "hello";
        

        要进行迭代,只需在 jQuery 中使用 for 循环或 $.each()

        【讨论】:

          【解决方案6】:

          确实,不需要数组对象,一个简单的对象就可以了;此外,一个数组引入了需要在方括号obj["var1 + var2"] 内使用引号来访问对象属性的值,而不是与索引关联的值(我认为);引号将"var1 + var2" 转换为字符串。使用一个简单的对象消除了对引号的需求,所以我可以使用obj[var1 + var2],这很有效:)

          谢谢大家!

          【讨论】:

          • 不,您不需要在括号内使用引号。如果你使用引号,你会得到文字字符串 "var1 + var2" 而不是 var1var2 的值。
          【解决方案7】:

          我做了类似以下的事情;

          let parentArray = [];
          let childArray = [1, 2, 3];
          childArray.name = 'my-array-1';
          parentArray.push(childArray);
          

          在 ES6 中通过名称访问它;

          parentArray.filter(x => x.name == 'my-array-1');
          

          【讨论】:

            猜你喜欢
            • 2011-05-06
            • 1970-01-01
            • 2012-05-08
            • 1970-01-01
            • 2021-05-04
            • 1970-01-01
            • 2011-03-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多