关于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.所以实际上它应该是一个正确的字符串。请解释
答案 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(因为它是一个数组),顺序是保留。