Строковое соединение в JScript? - PullRequest
0 голосов
/ 31 августа 2011

Как мне объединить несколько строк с разделителем в JScript?

(я ищу решение с линейным временем выполнения.)

Ответы [ 3 ]

6 голосов
/ 31 августа 2011

Как метод join()?= D

var elements = ["1", "2", "3"];
var joinedString = elements.join(',');
3 голосов
/ 31 августа 2011

Что-то вроде этого:

['a', 'b', 'c'].join(',');

Однако для небольшого числа строк оператор + тоже подойдет (и может быть лучше в зависимости от обстоятельств). Вот хорошая статья , сравнивающая 2 подхода.

И jsperf страница для скептиков.

2 голосов
/ 31 августа 2011

Вы можете использовать соединение с массивом.

var strArray = [
    "test1",
    "test2",
    "test3"
];

var output = strArray.join(", ");

Вот тест jsperf нескольких различных методов: http://jsperf.com/joining-strings. Присоединение - это, безусловно, самый быстрый способ, который я пробовал, по крайней мере, в 3 раза (в Chrome).

Вам придется попробовать jsperf самостоятельно и / или изменить его, чтобы точно смоделировать то, что вам нужно. К моему удивлению, Firefox 6 и Safari 5 быстрее просто складывают кучу строк, чем при использовании .join().

Вы сказали, что ищете решение с linear временем выполнения. Я предполагаю, что это означает, что когда вы удваиваете количество строк, производительность не хуже двойной. Это означает, что вам нужно протестировать кучу разных случаев и посмотреть, какая техника наиболее близка к линейной производительности. first jsperf объединял 9 строк с разделителями между ними. Итак, я написал второй jsperf , который объединял 18 строк с разделителями между ними. Ни один из методов не был достаточно линейным в Chrome. Как ни странно, метод for loop + =, который является самым медленным из всех, был ближе всего к линейному. Итак, я думаю, вы должны решить, хотите ли вы быстро или линейно. Самый медленный метод, который я попробовал, - самый близкий к линейному, но он все еще медленный. Если вы объединяете действительно большое количество строк, вам нужно протестировать этот конкретный случай, чтобы увидеть, какой из них выигрывает либо по линейности, либо по общей производительности.

...