起始为0的Javascript关联数组键
Javascript associative array keys with starting 0
我有一个关于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进行的(因为它是一个数组),并且顺序保持不变。
相关文章:
- 多维关联数组的最后一个索引
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 具有关联数组数据集的D3.js表
- 后关联数组使用jquery ajax
- 返回一个关联数组,而不是mongoose中的文档数组
- 如何在 Angular JS 中从关联数组创建多个复选框
- 存储在变量中的关联数组中的访问键
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- 在主要的JavaScript引擎中,在JavaScript关联数组(动态对象属性)中检索/插入的复杂性是多少
- 关联数组,并使用父数组d作为selection.data()的源数组
- 获取关联数组的标签
- JavaScript:如何在最接近值的关联数组中查找键
- 单击时显示关联数组的元素
- 关联数组 - 使用图像滑块显示键值
- Javascript从关联数组中查找最低数字(气泡排序方法)
- AngularJS过滤器不适用于我的数据:关联数组
- 获取关联数组中当前函数的键
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 正在检查JavaScript中是否存在关联数组
- 将数据附加到关联数组或维度数组