Если вы хотите выполнить итерацию большого массива и выборочно удалить элементы, было бы дорого вызывать splice () для каждого удаления, так как splice () будет каждый раз переиндексировать последующие элементы. Поскольку массивы являются ассоциативными в Javascript, было бы более эффективно удалить отдельные элементы, а затем повторно индексировать массив впоследствии.
Вы можете сделать это, создав новый массив. * например 1003 *
function reindexArray( array )
{
var result = [];
for( var key in array )
result.push( array[key] );
return result;
};
Но я не думаю, что вы можете изменить значения ключей в исходном массиве, что было бы более эффективно - похоже, вам, возможно, придется создать новый массив.
Обратите внимание, что вам не нужно проверять "неопределенные" записи, так как они на самом деле не существуют и цикл for не возвращает их. Это артефакт печати массива, который отображает их как неопределенные. Похоже, они не существуют в памяти.
Было бы неплохо, если бы вы могли использовать что-то вроде slice (), которое было бы быстрее, но оно не переиндексируется. Кто-нибудь знает лучший способ?
На самом деле, вы, вероятно, можете сделать это на месте следующим образом, что, вероятно, является более эффективным, с точки зрения производительности:
reindexArray : function( array )
{
var index = 0; // The index where the element should be
for( var key in array ) // Iterate the array
{
if( parseInt( key ) !== index ) // If the element is out of sequence
{
array[index] = array[key]; // Move it to the correct, earlier position in the array
++index; // Update the index
}
}
array.splice( index ); // Remove any remaining elements (These will be duplicates of earlier items)
},