Javascript关联数组键,起始点为0

时间:2013-07-12 19:44:27

标签: javascript jquery associative-array

关于javascript关联数组,我有一个简单的,可能有点愚蠢的问题。 以下是我的问题:

var testArr = [];
testArr["0000"] = "00000 - COST CENTER - BALANCE SHEET";
testArr["0017"] = "0017 - Test Team";
testArr["00033"] = "00033 - Test Team ";
testArr["87210"] = "87210 - OFFICE OF THE PRESIDENT";

在这些代码行之后,testArr会自动排序并显示如下:

testArr.87210 = "87210 - OFFICE OF THE PRESIDENT";
testArr.0000 = "00000 - COST CENTER - BALANCE SHEET";
testArr.0017 = "0017 - Test Team";
testArr.00033 = "00033 - Test Team ";

在我的情况下,0000应该是第一个值和默认值。但由于这个原因,它默认为87210。我怎么能克服这个?

编辑:当我在调试器窗口中看到testArr时,我看到如下所示的内容。我无法上传图片,但请关注此内容。非常感谢您的帮助。非常感谢!!

 testArr
       [87210] "87210 - OFFICE OF THE PRESIDENT";
       [prototype]  
       0000    "00000 - COST CENTER - BALANCE SHEET";
   0017    "0017 - Test Team";
   00033   "00033 - Test Team ";

我不太关注为什么会发生这种情况。我放的键是“0000”而不是0000.所以实际上它应该是一个正确的字符串。请解释

2 个答案:

答案 0 :(得分:4)

由于领先0,你有一个Javascript对象而不是Javascript数组。 Javascript对象没有订单。它们是一个关键的>值映射。您可以将值转换为数字,然后改为使用稀疏数组:

var testArr = [];
testArr[+"0000"] = "00000 - COST CENTER - BALANCE SHEET";
testArr[+"0017"] = "0017 - Test Team";
testArr[+"00033"] = "00033 - Test Team ";
testArr[+"87210"] = "87210 - OFFICE OF THE PRESIDENT";

// Results in:

[
     0: "00000 - COST CENTER - BALANCE SHEET",
    17: "0017 - Test Team",
    33: "00033 - Test Team ",
 87210: "87210 - OFFICE OF THE PRESIDENT"
]

如果您需要维护前导'0',或者您的密钥不一定总是数字,则应使用对象数组:

var testArr = [];
testArr.push({id: "0000", name: "00000 - COST CENTER - BALANCE SHEET"});
testArr.push({id: "0017", name: "0017 - Test Team"});
testArr.push({id: "00033", name: "00033 - Test Team "});
testArr.push({id: "87210", name: "87210 - OFFICE OF THE PRESIDENT"});

然后你维护订单并按顺序循环:

for(var i = 0; i < testArr.length; i++){
    console.log(testArr[i].id + ': ' + testArr[i].name);
}

答案 1 :(得分:0)

根据您的使用方式,您也可以这样做:

var testArr = [];

testArr.push({ id: "0000", value: "00000 - COST CENTER - BALANCE SHEET"});
testArr.push({ id: "0017", value: "0017 - Test Team"});
testArr.push({ id: "00033", value: "00033 - Test Team "});
testArr.push({ id: "87210", value: "87210 - OFFICE OF THE PRESIDENT"});

您的阵列将按照您创建的顺序保留,并且您的ID将保持不变。您当然会失去使用id访问项目的能力,如关联数组。

修改以回应您的评论:

javascript中的对象与关联数组相同。所以当你这样做时:

testArr["0000"] = whatever

完全相同

testArr.0000 = whatever

鉴于此,您可以看到为什么没有排序。对象中的属性没有排序顺序。

我正在做的不同是将对象推入数组(实际数组,而不是关联数组/对象),因此索引完成为0,1,2(因为它是一个数组),顺序是保留。