Array Join vs String Concat - PullRequest
       28

Array Join vs String Concat

62 голосов
/ 04 сентября 2011

Какой метод быстрее?

Array Регистрация:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output=myarray.join("");

Конкат строки:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output = "";
for (var i = 0, len = myarray.length; i<len; i++){
    output += myarray[i];
}

Ответы [ 6 ]

42 голосов
/ 04 сентября 2011

Объединение строк быстрее в ECMAScript. Вот эталонный тест, который я создал, чтобы показать вам:

http://jsben.ch/#/OJ3vo

8 голосов
/ 04 сентября 2011

Я могу с уверенностью сказать, что использование Array.join () быстрее. Я работал над несколькими частями кода JavaScript и значительно ускорил производительность, удалив манипуляции со строками в пользу массивов.

7 голосов
/ 06 мая 2016

С 2011 года и до наших дней ...

См. Следующее join перезапись с использованием конкатенации строк, и насколько она медленнее, чем стандартная реализация.

// Number of times the standard `join` is faster, by Node.js versions:
// 0.10.44: ~2.0
// 0.11.16: ~4.6
// 0.12.13: ~4.7
// 4.4.4: ~4.66
// 5.11.0: ~4.75
// 6.1.0: Negative ~1.2 (something is wrong with 6.x at the moment)
function join(sep) {
    var res = '';
    if (this.length) {
        res += this[0];
        for (var i = 1; i < this.length; i++) {
            res += sep + this[i];
        }
    }
    return res;
}

Мораль такова - не объединяйте строки вручную, всегда используйте стандарт join.

2 голосов
/ 14 декабря 2015

Согласно этому документу Google под названием 'Оптимизация кода JavaScript' string concat медленнее, чем присоединение к массиву, но, очевидно, это не так для современных движков Javascript.

Я сделал эталоном для примера теста Фибоначчи , который они использовали в документе, и он показывает, что конкатенация (склейка) строки почти в 4 раза быстрее, чем при использовании Array join.

1 голос
/ 06 марта 2018

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

Вот тест JSPerf, который проверяет эти две операции :

zxy.join('/')

// versus

zxy[0] + '/' + zxy[1] + '/' + zxy[2]

// given the array

zxy = [1, 2, 3]

// resulting in the string '0/1/2'

Результаты: При использовании Chrome 64.0.3282.186, Array.join был на 46% медленнее.

0 голосов
/ 27 декабря 2017

Оператор распространения , написанный с тремя последовательными точками (...), является новым в ES6 и дает вам возможность расширять или распространять итерируемые объекты на несколько элементов. .

const books = ["Don Quixote", "The Hobbit", "Alice in Wonderland", "Tale of Two Cities"];
console.log(...books);

Отпечатки: Дон Кихот Хоббит Алиса в стране чудес Сказка о двух городах

...