首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript遍历稀疏数组

Javascript遍历稀疏数组
EN

Stack Overflow用户
提问于 2012-05-13 03:27:05
回答 5查看 8.6K关注 0票数 13

我有一个稀疏数组(索引不是连续的),如下所示:

代码语言:javascript
复制
var testArray = { 0: "value1", 5: "value2", 10: "value3", 15: "value4" };

我只想迭代每一项,做一些事情,并能够打破在一定的条件下。

我对Javascript相当陌生,我没有找到合适的方法。以下是我尝试过的:

  1. 内置的"for..in“。看来这是不正确的遍历数组的方法
  2. forEach,来自ECMASCRIPT5。这个循环是正确的,但是我不能中断循环。
  3. .each(),来自Underscore.js。与2号相同的结果。
  4. $.each(),来自JQuery。使用这个方法,我可以返回false,但它不能正确地迭代。对于上面的例子,它不是在0,5,10,15处迭代,而是在0,1,2,3,4,5,6.这显然不是我所期望的。

所以我的问题是:是否有一种简单的方法来迭代稀疏数组,在Javascript循环期间有可能中断,还是使用另一种数据结构(比如哈希表)更好呢?如果是的话,有什么命令吗?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-13 03:32:26

for...in语法有什么问题?您有一个对象,因此for...in语法是完全有效的:

代码语言:javascript
复制
var testArray = { 0: "value1", 5: "value2", 10: "value3", 15: "value4" };

for (var key in testArray) {
  var value = testArray[key];

  if (...) {
    break;
  }
}
票数 10
EN

Stack Overflow用户

发布于 2012-05-13 03:33:01

在处理对象哈希时,For..in并不是最糟糕的事情。可以避免与数组([])一起使用,但是在这里应该是可以的:

代码语言:javascript
复制
var val;
for (index in testArray) {
  if (index == 10) {
    break;
  } else {
    val = testArray[index];
  }
}
票数 3
EN

Stack Overflow用户

发布于 2016-04-20 21:17:51

你所拥有的不是数组,它只是一个对象。

您可以通过以下方法进行测试:

代码语言:javascript
复制
Array.isArray(testArray)

值得注意的是,JavaScript的数组据说是稀疏的。当您使用delete运算符删除元素或将length属性更改为更大时,就会发生这种情况。

要回答你的问题,通过一个对象循环,最好的方法是Object.keys(obj).forEach()

代码语言:javascript
复制
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,而且它没有任何可枚举属性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10569106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档