起始为0的Javascript关联数组键

Javascript associative array keys with starting 0

本文关键字:关联 数组 Javascript      更新时间:2023-09-26

我有一个关于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,您有一个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);
}

根据您需要如何使用它,您还可以执行以下操作:

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进行的(因为它是一个数组),并且顺序保持不变。