1

关于 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。所以实际上它应该是一个字符串。请解释

4

2 回答 2

4

由于前导0's 你有一个 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's,或者如果您的键不一定总是数字,则应该使用对象数组来代替:

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);
}
于 2013-07-12T19:47:22.910 回答
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 完成(因为它是数组),并保留顺序。

于 2013-07-12T19:52:06.723 回答