Как очистить массив в JavaScript?

По определению сортировка по умолчанию не определена, а также порядок возврата документов. Если запрос отсутствует, он будет использовать естественный порядок . Результаты возвращаются в том порядке, в котором они найдены, что может совпадать с порядком вставки (но не гарантировано) или порядком используемого индекса.

Некоторые примеры, которые повлияют на хранение (естественный) порядок:

  • , если документы обновлены и не помещаются в их выделенное место, они будут перемещены
  • новые документы могут быть вставлены в имеющиеся промежутки, созданные удаленными или перемещенными документами

Если используется индекс, документы будут возвращены в том порядке, в котором они найдены. Если используется более одного индекса, то порядок зависит от внутреннего индекса, по которому индекс сначала идентифицировал документ во время процесса дедупликации.

Если вам нужен конкретный заказ, вы должны включить сортировку в свой запрос.

Исключение, указанное для естественного порядка с ограниченным набором , состоит в том, что документы не могут перемещаться и сохраняются в порядке размещения. Заказ является частью ограниченного набора, который гарантирует, что самые старые документы «возрастут» в первую очередь. Кроме того, документы не могут быть удалены или перемещены в сборнике (см. Использование и ограничения для получения дополнительной информации).

2199
задан Peter Mortensen 12 November 2015 в 05:22
поделиться

2 ответа

Способы очистки существующего массива A :

Метод 1

(это был мой первоначальный ответ на вопрос)

A = [];

Этот код установит переменную A в новый пустой массив. Это идеально, если у вас нет ссылок на исходный массив A где-либо еще, потому что это фактически создает совершенно новый (пустой) массив. Вы должны быть осторожны с этим методом, потому что, если вы ссылаетесь на этот массив из другой переменной или свойства, исходный массив останется без изменений. Используйте это только в том случае, если вы ссылаетесь на массив только по его исходной переменной A .

Это также самое быстрое решение.

В этом примере кода показана проблема, с которой вы можете столкнуться при использовании этого метода:

var arr1 = ['a','b','c','d','e','f'];
var arr2 = arr1;  // Reference arr1 by another variable 
arr1 = [];
console.log(arr2); // Output ['a','b','c','d','e','f']

Метод 2 (как предложил Мэтью Крамли] )

A.length = 0

Это очистит существующий массив, установив его длину равной 0. Некоторые утверждали, что это может работать не во всех реализациях JavaScript, но оказалось, что это не так. Он также работает при использовании «строгого режима» в ECMAScript 5, поскольку свойство длины массива является свойством чтения / записи.

Метод 3 (как предложил Энтони ) ])

A.splice(0,A.length)

Использование .splice () будет работать отлично, но поскольку функция .splice () вернет массив со всеми удаленными элементами, она фактически вернет копию исходного массива. Тесты показывают, что это никак не влияет на производительность.

Метод 4 (как предложил tanguy_k ])

while(A.length > 0) {
    A.pop();
}

Это решение не очень емкое, и оно также самое медленное решение, в отличие от предыдущих тестов, упомянутых в исходном ответе.

Производительность

Из всех методов очистки существующего массива методы 2 и 3 очень похожи по производительности и являются намного быстрее, чем метод 4. См. этот тест .

Как указано Diadistis в их ответе ниже, исходные тесты, которые использовались для определения выполнение четырех описанных выше методов было некорректным. Исходный тест повторно использовал очищенный массив, поэтому вторая итерация очищала массив, который уже был пуст.

Следующий тест исправляет этот недостаток: http://jsben.ch/#/hyj65 . Он ясно показывает, что методы №2 (свойство длины) и №3 (сращивание) являются самыми быстрыми (не считая метода №1, который не изменяет исходный массив).


Это была горячая тема и причина много споров. На самом деле существует много правильных ответов, и поскольку этот ответ был отмечен как принятый в течение очень долгого времени, я включу сюда все методы. Если вы проголосуете за этот ответ, поддержите и другие ответы, на которые я ссылался.


Это была горячая тема и причина множества споров. На самом деле существует много правильных ответов, и поскольку этот ответ был отмечен как принятый в течение очень долгого времени, я включу сюда все методы. Если вы проголосуете за этот ответ, поддержите и другие ответы, на которые я ссылался.


Это была горячая тема и причина множества споров. На самом деле существует много правильных ответов, и поскольку этот ответ был отмечен как принятый в течение очень долгого времени, я включу сюда все методы. Если вы проголосуете за этот ответ, поддержите и другие ответы, на которые я ссылался.

4143
ответ дан 22 November 2019 в 19:59
поделиться

Если вам нужно сохранить исходный массив, потому что у вас есть другие ссылки на него, которые тоже следует обновить, вы можете очистить его, не создавая новый массив, установив его длину равной нулю:

A.length = 0;
2391
ответ дан 22 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: