【问题标题】:is it valid javascript to access non-numeric key object with a numeric key?使用数字键访问非数字键对象是否有效?
【发布时间】:2012-12-22 18:16:28
【问题描述】:

我有一个对象

data = {
    'choiceA' : 'Long-Wear',
    'choiceB' : 'Anti-Age Lifting/Firming',
    'choiceC' : 'Replenishing/ Moisturizing',
    'choiceD' : 'Natural/ True-to-Skin',
    'choiceE' : 'Smoothing/ Illuminating'
}    

我需要检索给定整数的第四个值

 position = 3;

通常我会写

 key = $.inArray( position, ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE']);
 answer = data[key];

但是像这样使用数字键直接访问对象是否有效?

 answer = data[position];  // where position is an integer

编辑:
我在向后使用 $.inArray 时编写的一些错误代码!
我的意思是写

 arr = ['choiceA', 'choiceB', 'choiceC', 'choiceD', 'choiceE'];
 key = arr[position];
 answer = data[key];

【问题讨论】:

    标签: javascript object key numeric


    【解决方案1】:

    两件事:

    1. Javascript 键始终是字符串。如果您传递其他内容(例如数字),它将被转换为字符串。 (例如,尝试使用 array["3"] 索引一个数组,它应该可以工作

    2. Javascript 对象是 not 有序的!您无法以可移植的方式取回第 i 个键值对。相反,您应该使用数组来存储东西(或类似的东西):

      data = [
          { name:'choiceA', value: 'Long-Wear'},
          { name:'choiceB', value: 'Anti-Age Lifting/Firming'}
      ];
      

      如果您无法更改数据表示,您可以做的一件事是使用 for-in 循环和计数变量遍历您的对象。但是,这种方法不可移植,因为并非所有浏览器都按照定义键的顺序进行迭代。

    【讨论】:

    • 我将答案授予第一张海报,但感谢您提供的信息丰富的回答。今天学到了很多东西。
    【解决方案2】:

    如果您尝试过,您会发现它是无效的。更不行了!

    data[position]
    

    在您的示例中将返回 undefined...

    【讨论】:

    • 你说得对,先生,我没有尝试过,发布这个问题是我走神的一种矫揉造作。有罪并感谢您的回答
    【解决方案3】:

    不,在您拥有数字对象“键”之前它是无效的,即

    data = {
        '1' : 'Long-Wear',
        '2' : 'Anti-Age Lifting/Firming',
        '3' : 'Replenishing/ Moisturizing',
        '4' : 'Natural/ True-to-Skin',
        '5' : 'Smoothing/ Illuminating'
    };
    

    另外,需要注意的是,JavaScript 对象中的属性未排序。因此,正如我所见,您的解决方案是最好的方法。

    【讨论】:

    • 我不知道他们没有排序......今天学到了一些东西。感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多