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

Javascript associative array keys with starting 0

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
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自动排序并显示如下:

1
2
3
4
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列为违约。我怎样才能克服这个问题?

编辑:当我在Debugger窗口中看到Testarr时,我看到如下内容。我无法上传图片,但请按此操作。非常感谢你的帮助。非常感谢!!

1
2
3
4
5
6
 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是一个javascript对象,而不是一个javascript数组。javascript对象没有顺序。它们是一个键->值映射。您可以将值转换为数字,然后改为使用稀疏数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,或者您的键不一定总是数字的,您应该使用一个对象数组来代替:

1
2
3
4
5
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"});

然后保持顺序,并可以按如下顺序循环:

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


根据您需要如何使用它,您也可以这样做:

1
2
3
4
5
6
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(因为它是一个数组)进行的,并且顺序是保留的。