需要重置JavaScript数组中的索引

9

我有一个for循环,它返回一个数组。

返回:

1st loop:
arr[0]
arr[1]
arr[2]
arr[3]

这里得到的长度是4(没有问题)。

返回:

2nd loop
arr[4]
arr[5]
arr[6]
arr[7] 
arr[8] 

这里我得到的长度是9

我想要的是实际索引的计数,即我需要它是5。我该怎么做?是否有一种方法,在每次进入循环时都从0开始,以便在所有循环中获得正确的长度?


3
你能发一下相关的代码吗? - jbabey
1
你需要首先展示你正在使用的循环,其中的条件以及数组的初始化。 - Dan Prince
4个回答

39

这可以轻松地使用 Array.filter 原生实现:

resetArr = orgArr.filter(function(){return true;});

2
对我来说完美地工作了! - Emmanuel
1
+1 个简洁的解决方案。它甚至可以在使用相同的数组时工作:origArr = origArr.filter(...) - lepe
请注意,这对于IE <= 8不起作用。您可以实现建议的polyfill来解决这个问题:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter - Dag Sondre Hansen
2
稍微简短的版本:resetArr = orgArr.filter(Boolean); - M_R_K

4

容易,

var filterd_array = my_array.filter(Boolean);

4
你可以将数组中的所有元素复制到一个新数组中,该新数组的索引从零开始。
例如:
function startFromZero(arr) {
    var newArr = [];
    var count = 0;

    for (var i in arr) {
        newArr[count++] = arr[i];
    }

    return newArr;
}

// messed up array
x = [];
x[3] = 'a';
x[4] = 'b';
x[5] = 'c';

// everything is reordered starting at zero
x = startFromZero(x);

我爱你,crazedgremlin.. 你让我的一天变得美好。 - Adnan Baliwala
1
不客气!只是让你知道,这是一个糟糕的解决方案 -- 你应该选择一个新的数据结构,比如链表,这样就可以在不必每次重新创建数组的情况下删除项目。另外,如果你已经找到了解决方案,你应该选择一个答案! - danmcardle

3

很棒的库;适用于数组,也避免删除非空对象。 - Victor Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接