我有一个稀疏数组(索引不是连续的),如下所示:
var testArray = { 0: "value1", 5: "value2", 10: "value3", 15: "value4" };我只想迭代每一项,做一些事情,并能够打破在一定的条件下。
我对Javascript相当陌生,我没有找到合适的方法。以下是我尝试过的:
所以我的问题是:是否有一种简单的方法来迭代稀疏数组,在Javascript循环期间有可能中断,还是使用另一种数据结构(比如哈希表)更好呢?如果是的话,有什么命令吗?
谢谢!
发布于 2012-05-13 03:32:26
for...in语法有什么问题?您有一个对象,因此for...in语法是完全有效的:
var testArray = { 0: "value1", 5: "value2", 10: "value3", 15: "value4" };
for (var key in testArray) {
var value = testArray[key];
if (...) {
break;
}
}发布于 2012-05-13 03:33:01
在处理对象哈希时,For..in并不是最糟糕的事情。可以避免与数组([])一起使用,但是在这里应该是可以的:
var val;
for (index in testArray) {
if (index == 10) {
break;
} else {
val = testArray[index];
}
}发布于 2016-04-20 21:17:51
你所拥有的不是数组,它只是一个对象。
您可以通过以下方法进行测试:
Array.isArray(testArray)值得注意的是,JavaScript的数组据说是稀疏的。当您使用delete运算符删除元素或将length属性更改为更大时,就会发生这种情况。
要回答你的问题,通过一个对象循环,最好的方法是Object.keys(obj).forEach()。
var o = {"a":3, "b":4};
Object.keys(o).forEach(
function (key) {
var val = o[key];
console.log("Key:" + key);
console.log("Value:" + val);
}
);for (var p in o) {…}可能存在的问题是,它还会通过父(即原型链)中的任何可枚举属性循环。但是,通常不会发生这种情况,如果您通过文字表达式var obj = {...}来定义对象,默认情况下它的父对象是Object.prototype,而且它没有任何可枚举属性。
https://stackoverflow.com/questions/10569106
复制相似问题