关于javascript:如何“重置”数组的密钥?

How can I “reset” an array's keys?

本问题已经有最佳答案,请猛点这里访问。

如果我有一个数组,并且删除了某些元素,那么我最后得到的是一个具有非连续键的数组:

1
2
3
4
5
var arr = [15,16,20,21,-1];
delete arr[1];
delete arr[3];
console.log(arr);
// [0: 15, 2: 20, 4: -1]

如何"重置"阵列的键?

我应该以这样的数组结束:

1
[0: 15, 1: 20, 2: -1]


例如,您可以使用Array.prototype.filter方法。

1
2
3
4
5
6
7
8
9
var array = [];
array[30] = 1;
array.length; // 31

var compactArray = array.filter(function (item) {
    return item !== undefined;
});

compactArray.length; // 1

如果它是一个对象,那么for..in循环将非常有用。

1
2
3
4
5
var array = { 31: 1};
var compactArray = [];
for (var i in array) {
    compactArray.push(array[i]);
}


您可以循环抛出数组,如果它是一个有效项,则推入另一个数组。

而且,当你做这种事的时候,

1
2
var arr = [];
arr[3] = 15;

arr实际上是[null, null, null, 15]

下面是一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(function() {
  var arr = [];
  var result = [];

  arr[3] = 15;
  arr[7] = 20;
  arr[19] = -1;

  console.log(arr);
  console.log(JSON.stringify(arr))

  arr.forEach(function(item) {
    if (item) {
      result.push(item);
    }
  })

  console.log(result);
  console.log(JSON.stringify(result));
})()


如果你的意思是你的物体是这样的

1
2
3
4
5
6
7
8
9
var obj = {3: 15, 7: 20, 19: -1};
var output = {};
var counter = 0;
for ( var id in obj )
{
   output[ String( counter ) ] = obj[ id ];
   counter++;
}
console.log( output );