Chr*_*son 7 javascript arrays sparse-array
我有一个稀疏数组,其内容不保证以索引顺序插入,但需要按索引顺序迭代.要遍历稀疏数组,我了解您需要使用for..in语句.
但是,根据这篇文章:
无法保证for ... in将以任何特定顺序返回索引
但是像这样的stackoverflow问题表明虽然对象属性订单不能保证,但是数组顺序是:
在JavaScript中不保证对象中的属性顺序,您需要使用数组.
我在Chrome,Firefox和IE的最新版本中对此进行了测试.
<ol id="items"></ol>
Run Code Online (Sandbox Code Playgroud)
var list = [];
function addItem(index) {
list[index] = { idx : index };
}
var insertOrder = [ 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 ];
for ( var i = 0; i < 15; i++ ) {
addItem(insertOrder[i]);
}
for(var item in list) {
$("#items").append("<li>" + list[item].idx + "</li>");
}
Run Code Online (Sandbox Code Playgroud)
所有人似乎都遵守索引顺序,所以我可以相信这总是如此吗?否则,我如何以索引顺序最好地获取它们?
JLR*_*she 12
MDN可以回答您的原始问题:
注意:for..in不应该用于迭代索引顺序很重要的数组.
数组索引只是具有整数名称的可枚举属性,并且与一般对象属性相同.无法保证for ... in将以任何特定顺序返回索引,并且它将返回所有可枚举属性,包括具有非整数名称和继承的属性.
您不必使用for..in
迭代稀疏数组,如果可以,您绝对应该避免这样做.
你可以使用.forEach
:
list.forEach(function (el) { // add a second parameter if you need the indices
$("#items").append($("<li>").text(el.idx));
});
Run Code Online (Sandbox Code Playgroud)
forEach
被定义为按索引顺序迭代,并且只包含数组中存在的元素:
forEach
对数组中存在的每个元素按升序执行一次提供的回调.对于已删除或省略的索引,不会调用它.但是,它是针对存在的元素执行的,并且值未定义.
如果您的目标是不支持的环境,则forEach
可以使用以下内容或该MDN页面上提供的填充程序:
for (var i = 0; i < list.length; i += 1) {
if (i in list) {
$("#items").append($("<li>").text(list[i].idx));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1793 次 |
最近记录: |