meo
meo

Reputation: 31249

how to construct a long string

I need to construct a long string with javascript. Thats how i tried to do it:

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

When i execute that in firefox its taking ages or makes it crash. what is the best way to do that? What is generally the best way to construct big strings in JS.

can someone help me?

Upvotes: 3

Views: 4331

Answers (4)

kennytm
kennytm

Reputation: 523334

I assume you mean html += html;.

If you do that, your html string's length will be 37 × 2400 = 9.5 × 10121 which is beyond the limit of any browsers, on any computers, in any[1] known universes can handle.

If you just want to repeat that string 400 times, use

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

or

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

See Repeat String - Javascript for more options.


[1]: As in "this universe".

Upvotes: 12

Andy E
Andy E

Reputation: 344585

String concatenation is very slow in some browsers (coughIE6*cough*). Joining an array should be much quicker than looping with concatenation:

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

Upvotes: 6

Kathy Van Stone
Kathy Van Stone

Reputation: 26291

Another way to do it is by create an Array of stings then using Array.join(''). This is effectively the Python way of building strings, but it should work for JavaScript as well.

Upvotes: 1

Devon_C_Miller
Devon_C_Miller

Reputation: 16528

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

Your code is doubling the string 400 times.

Upvotes: 0

Related Questions