source

JavaScript에는 스트링빌더 클래스가 내장되어 있습니까?

manycodes 2022. 12. 5. 21:25
반응형

JavaScript에는 스트링빌더 클래스가 내장되어 있습니까?

가지 코드 프로젝트 솔루션이 있습니다.

하지만 JavaScript에는 정기적으로 구현이 있습니까?

Internet Explorer용 코드를 작성해야 할 경우 어레이 조인을 사용하는 구현을 선택해야 합니다.스트링과 를 연결하다+또는+=오퍼레이터가 IE에서 매우 느립니다.이것은 특히 IE6에 해당됩니다.최신 브라우저+=일반적으로 어레이 결합과 같은 속도입니다.

많은 문자열 연결을 수행해야 할 경우 일반적으로 어레이를 채우고 문자열 빌더 클래스를 사용하지 않습니다.

var html = [];
html.push(
  "<html>",
  "<body>",
  "bla bla bla",
  "</body>",
  "</html>"
);
return html.join("");

주의:push메서드는 여러 인수를 받아들입니다.

방금 http://jsperf.com/javascript-concat-vs-join/2에서 공연을 다시 확인했어요.테스트 케이스는 알파벳을 1,000번 연결하거나 결합합니다.

현재 브라우저(FF, Opera, IE11, Chrome)에서는 "concat"이 "join"보다 약 4-10배 더 빠릅니다.

IE8에서는, 양쪽 모두 거의 같은 결과를 반환합니다.

IE7에서는 안타깝게도 가입이 약 100배 빨라집니다.

아니요, 문자열 작성에 대한 기본 지원은 없습니다.대신 연결을 사용해야 합니다.

물론 스트링의 다른 부분을 배열하여 호출할 수 있습니다.join()그 배열에 따라 다르지만, 사용 중인 JavaScript 인터프리터에서 조인이 어떻게 구현되는지에 따라 달라집니다.

나는 그것의 속도를 비교하기 위한 실험을 했다.str1+str2메서드 vsarray.push(str1, str2).join()방법.코드는 간단했습니다.

var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++)
    str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));

var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)
    arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));

Internet Explorer 8과 Firefox 3.5.5에서 모두 Windows 7 x 64로 테스트했습니다.

처음에는 적은 횟수(몇 백 개, 몇 천 개)로 테스트했습니다.결과는 예측할 수 없었습니다(문자열 연결에 0밀리초, 어레이 가입에 16밀리초가 걸리는 경우도 있었습니다).

카운트를 50,000으로 늘렸을 때 결과는 브라우저마다 달랐습니다.Internet Explorer에서는 문자열 연결 속도가 더 빨랐고(94밀리초), 조인 속도가 더 느렸습니다(125밀리초), Firefox에서는 어레이 결합 속도가 더 빨랐습니다(113밀리초).

그리고 50만 개로 늘렸습니다.자, 이제.array.join() 브라우저 모두에서 문자열 연결보다 느렸습니다.문자열 연결은 Internet Explorer에서 937밀리초, Firefox에서 1155밀리초, Internet Explorer에서 어레이 조인 1265밀리초, Firefox에서 1207밀리초였습니다.

Internet Explorer에서 "스크립트를 실행하는 데 시간이 너무 오래 걸립니다"를 사용하지 않고 테스트할 수 있는 최대 반복 횟수는 850,000회였습니다.그 후 Internet Explorer는 문자열 연결용으로 1593개, 어레이 연결용으로 2046개, Firefox는 문자열 연결용으로 2101개, 어레이 연결용으로 2249개였습니다.

결과 - 반복 횟수가 적은 경우 다음을 사용할 수 있습니다.array.join()파이어폭스에서 더 빠를 수 있습니다.가 증가하면, 「」가 .string1+string2방법이 더 빠릅니다.

갱신하다

Internet Explorer 6(Windows XP)에서 테스트를 실행했다.테스트를 10만 번 이상 반복해도 프로세스가 즉시 중지되어 종료되지 않았습니다.40,000회 반복한 결과는 다음과 같습니다.

Time (strings): 59175 ms
Time (arrays): 220 ms

6을 하려면 [ ]를 선택합니다.Internet Explorer 6을 선택합니다.array.join()문자열 연결보다 훨씬 빠릅니다.

그 코드는 몇 가지 변경을 가하여 원하는 경로처럼 보입니다.

추가 방법을 다음과 같이 변경해야 합니다.0을 숫자 0을 .this추가 정보를 연결할 수 있습니다.

StringBuilder.prototype.append = function (value) {
    if (value || value === 0) {
        this.strings.push(value);
    }
    return this;
}

편집

아니요, 기본 제공 클래스는 없습니다. ★★★★★★★★★★★★★★.string literals을 사용하다

원래의 회답

ECMAScript 6 버전(ECMAScript 2015라고도 함)에서는 문자열 리터럴이 도입되었습니다.

var classType = "stringbuilder";
var q = `Does JavaScript have a built-in ${classType} class?`;

작은 따옴표 대신 back-ticks가 문자열을 둘러싼다는 점에 유의하십시오.

다음 함수를 정의했습니다.

function format() {
        var args = arguments;
        if (args.length <= 1) { 
            return args;
        }
        var result = args[0];
        for (var i = 1; i < args.length; i++) {
            result = result.replace(new RegExp("\\{" + (i - 1) + "\\}", "g"), args[i]);
        }
        return result;
    }

c#과 같이 호출할 수 있습니다.

 var text = format("hello {0}, your age is {1}.",  "John",  29);

결과:

안녕 존, 너의 나이는 29살이야.

JavaScript용 String Builder를 사용해 보십시오.

  
function StringBuilder(value) {
    this.strings = new Array();
    this.append(value);
}

StringBuilder.prototype.append = function (value) {
    if (value) {
        this.strings.push(value);
    }
}

StringBuilder.prototype.clear = function () {
    this.strings.length = 0;
}

StringBuilder.prototype.toString = function () {
    return this.strings.join("");
}

var sb = new StringBuilder();
sb.append("This is");
sb.append("much better looking");
sb.append("than using +=");

var myString = sb.toString();

sb.clear();

다음은 Typescript의 String Builder 클래스의 간단한 예입니다.

export class StringBuilder {
  private _lines: string[] = [];

  write(line: string = ""): void {
    this._lines.push(line);
  }

  writeln(line: string = ""): void {
    this._lines.push(line);
    this._lines.push("\n");
  }

  toString(): string {
    return this._lines.join("");
  }
}

다음과 같이 사용할 수 있습니다.

const sb = new StringBuilder();
sb.write("Hello World");
sb.writeln("!");
console.log(sb.toString());

어레이를 기동할 수 있는 방법을 소개합니다.참가:

var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);

예상대로 출력은 문자열 'foobar'입니다.파이어폭스에서는, 이 어프로치가 어레이를 웃돌고 있습니다.결합은 + 연결보다 성능이 우수합니다.String.concat에서는 각 세그먼트를 별도의 인수로 지정해야 하므로 발신자는 실행 중인 JavaScript 엔진에 의해 부과되는 인수 수 제한에 의해 제한됩니다.자세한 내용은 Function.protype.apply() 문서를 참조하십시오.

JavaScript에서 많은 문자열 연결을 하고 있는 나를 발견하면, 나는 템플리트를 찾기 시작한다.Handlebars.js는 HTML과 JavaScript의 가독성을 유지하는데 매우 적합합니다.http://handlebarsjs.com

C#에서는 다음과 같은 작업을 수행할 수 있습니다.

 String.Format("hello {0}, your age is {1}.",  "John",  29) 

JavaScript에서는 다음과 같은 작업을 수행할 수 있습니다.

 var x = "hello {0}, your age is {1}";
 x = x.replace(/\{0\}/g, "John");
 x = x.replace(/\{1\}/g, 29);

는 요?sys.StringBuilder()음음 츠키

https://msdn.microsoft.com/en-us/library/bb310852.aspx

언급URL : https://stackoverflow.com/questions/2087522/does-javascript-have-a-built-in-stringbuilder-class

반응형