Я хочу объединить два массива в один. Я обнаружил, что две функции могут выполнять эту работу; один - jQuery.merge(), а другой - встроенная функция JavaScript concat(). Похоже, они делают то же самое, и я нашел этот. В нем говорится: «Слияние создает меньшую площадь, потому что оно проходит по исходному массиву и добавляет новые элементы. Concat - это встроенная функция Javascript, которая должна быть быстрее, но с большей площадью». Я не уверен, верно ли это утверждение, и есть ли другие различия?

9
tmaster 1 Фев 2013 в 20:51

2 ответа

Лучший ответ

Эта цитата верна, и две функции на самом деле не делают одно и то же: одна объединяет два массива в один (первый параметр), а вторая создает новый массив из обеих.

«След», на который он ссылается, - это максимальный объем памяти, который будет использоваться в любое время. Так как слияние только собирается дублировать второй массив, он должен использовать меньше памяти, так как в любое время ему потребуется только 2 массива в памяти.

Встроенная функция должна иметь 3 массива, а новый массив должен иметь размер обоих объединяемых массивов.

Предполагая 1000 элементов в массивах A и B, и объединенный массив как C:

  • Для слияния потребуется 1000 + 1000 [a-> c] и 1000 [b] или 3000 точек.
  • Concat потребуется 1000 + 1000 [c] и 1000 [a] и 1000 [b] или 4000 мест.

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

Некоторые тесты, которые я нашел

10
nycynik 1 Фев 2013 в 17:04

В ситуации tmaster он использовал jQuery.merge () для слияния 2 массивов. Фактически, JQuery.merge может использоваться для слияния объекта jQuery (у объекта jQuery тоже есть длина prop) с Array.Here - это код jQuery.merge ():

merge: function( first, second ) {
    var len = +second.length,
        j = 0,
        i = first.length;

    for ( ; j < len; j++ ) {
        first[ i++ ] = second[ j ];
    }

    first.length = i;

    return first;
},

Так что для объекта JQuery есть свойство length, он может использовать слияние для копирования второго объекта JQuery attr, например 0,1, в первый объект JQuery. Вот пример:

    pushStack: function( elems ) {

    // Build a new jQuery matched element set
    var ret = jQuery.merge( this.constructor(), elems );

    ...

    return ret;
},

This.constructor () возвращает объект jQuery, тоже элемент. Но concat не может, это можно использовать только с Array. Это также разница между concat и JQuery.merge.

1
jinspire 30 Окт 2013 в 06:26