2010-04-09 3 views
3

Мне нужно построить длинную строку с javascript. То как я попытался сделать это:Как построить длинную строку

var html = '<div style="balbalblaba">&nbsp;</div>'; 
for(i = 1; i <= 400; i++){ 
    html+=html; 
}; 

Когда я выполняю что в firefox его принимает времена или делает его crash. Каков наилучший способ сделать это? Как правило, лучший способ построить большие строки в JS.

Может мне кто-то помочь?

+0

Duplicate? http://stackoverflow.com/questions/202605/repeat-string-javascript –

ответ

12

Предполагаете, вы имеете в виду html += html;.

Если вы сделаете это, длина вашей html струны будет 37 = 9,5 , который находится за пределом любых браузеров, на любых компьютерах, в любых [1] известных вселенных может справиться.

Если вы просто хотите, чтобы повторить эту строку в 400 раз, используйте

var res = ""; 
for (var i = 0; i < 400; ++ i) 
    res += html; 
return res; 

или

var res = []; 
for (var i = 0; i < 400; ++ i) 
    res.push(html); 
return res.join(""); 

См Repeat String - Javascript больше вариантов.


[1]: Как в "этой вселенной".

+0

+1 но должен быть «... любыми браузерами и любыми компьютерами в юниверсе _known_» ... – 2010-04-09 19:37:22

+0

thx для ссылки! Да, я сделал ошибку, упростив свой пример для публикации! Большое спасибо за объяснение! Как получается, что быстрее сгладить массив, а затем присоединиться к некоторым строкам? – meo

+0

@david: 'Array.join' был более эффективным, чем' + = 'для длинной строки. В настоящее время я не знаю ситуации оптимизации JS, но лучше построить строку, использующую '.join' для обслуживания старых браузеров. – kennytm

0
var src = '<div style="balbalblaba">&nbsp;</div>'; 
var html = ''; 
for(i = 1; i <= 400; i++){ 
    html=+src; 
}; 

Ваш код удваивает строку 400 раз.

+0

Я думаю, что 'html = + src' делает' html' равным 0. – Gabe

1

Другой способ сделать это, создав Array укусов, а затем используя . Это эффективный способ построения строк на Python, но он также должен работать и для JavaScript.

6

Конкатенация строк в некоторых браузерах очень медленная (cough IE6 * cough *). Присоединение массива должно быть намного быстрее, чем цикл с конкатенацией:

var arr = new Array(401); 
var html = arr.join('<div style="balbalblaba">&nbsp;</div>'); 
+0

Вы можете покончить с префиксом 'new', так как достаточно 'Array (401)' будет достаточно. – James

+2

@JP: вы можете, но поведение точно такое же, и я обычно предпочитаю рассматривать объект 'Array()' как конструктор при создании массивов с ним :-) –

+1

+1 это идиома для умножения строк в JS , – bobince

Смежные вопросы