如果我有一个数组但我删除了某些元素,我最终得到一个具有非连续键的数组:
var arr = [15,16,20,21,-1];
delete arr[1];
delete arr[3];
console.log(arr);
// [0: 15, 2: 20, 4: -1]
如何“重置”数组的键?
我应该最终得到一个像这样的数组:
[0: 15, 1: 20, 2: -1]
答案 0 :(得分:4)
例如,您可以使用Array.prototype.filter
方法。
var array = [];
array[30] = 1;
array.length; // 31
var compactArray = array.filter(function (item) {
return item !== undefined;
});
compactArray.length; // 1
如果它是一个对象,for..in
循环将是有用的
var array = { 31: 1};
var compactArray = [];
for (var i in array) {
compactArray.push(array[i]);
}
答案 1 :(得分:1)
你可以循环抛出数组,如果它是一个有效的项目,那么推入另一个数组。
此外,当你做这样的事情时,
var arr = [];
arr[3] = 15;
arr
实际上是[null, null, null, 15]
以下是一个例子。
(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));
})()

答案 2 :(得分:0)
如果您的意思是对象就像这样
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 );