JavaScript에서 특정 색인의 문자를 바꾸려면 어떻게해야합니까?

문자열을 가지고 있다고 가정 해 봅시다 Hello world. 색인 3에서 문자를 바꿔야합니다. 색인을 지정하여 문자를 바꾸려면 어떻게해야합니까?

var str = "hello world";

나는 같은 것이 필요하다

str.replaceAt(0,"h");


답변

JavaScript에서 문자열은 변경할 수 없으므로 변경된 내용으로 새 문자열을 만들고 변수를 지정하도록 지정하는 것이 최선의 방법입니다.

replaceAt()함수를 직접 정의해야합니다 .

String.prototype.replaceAt = function(index, replacement) {
    return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}

그리고 이것을 다음과 같이 사용하십시오 :

var hello = "Hello World";
alert(hello.replaceAt(2, "!!")); // Should display He!!o World

답변

replaceAtJavaScript 에는 기능 이 없습니다 . 다음 코드를 사용하여 지정된 위치에있는 문자열의 모든 문자를 바꿀 수 있습니다.

function rep() {
    var str = 'Hello World';
    str = setCharAt(str,4,'a');
    alert(str);
}

function setCharAt(str,index,chr) {
    if(index > str.length-1) return str;
    return str.substr(0,index) + chr + str.substr(index+1);
}
<button onclick="rep();">click</button>

답변

당신은 할 수 없습니다. 위치 전후의 문자를 사용하여 새 문자열로 연결하십시오.

var s = "Hello world";
var index = 3;
s = s.substring(0, index) + 'x' + s.substring(index + 1);

답변

여기에 많은 답변이 있으며 모두 두 가지 방법을 기반으로합니다.

  • 방법 1 : 두 개의 하위 문자열을 사용하여 문자열을 분할하고 그 사이에 문자를 넣습니다.
  • METHOD2 : 문자열을 문자형 배열로 변환하고 하나의 배열 구성원을 대체하여 결합

개인적으로, 나는이 두 가지 방법을 다른 경우에 사용할 것입니다. 설명하겠습니다.

@ FabioPhms : 귀하의 방법은 처음에 사용한 방법이며 많은 문자가있는 문자열이 나쁘다는 것을 두려워했습니다. 그러나 질문은 많은 캐릭터가 무엇입니까? 10 개의 “lorem ipsum”단락에서 테스트했으며 몇 밀리 초가 걸렸습니다. 그런 다음 10 배 큰 문자열로 테스트했습니다. 큰 차이는 없었습니다. 흠.

@vsync, @Cory Mawhorter : 귀하의 의견은 모호하지 않습니다. 그러나 다시 큰 문자열은 무엇입니까? 32 … 100kb의 성능이 향상되고 문자 교체 작업 하나에 하위 문자열 변형을 사용해야한다는 데 동의합니다.

그러나 약간의 교체 작업을 수행하면 어떻게됩니까?

그 경우 더 빠른 것을 증명하기 위해 자체 테스트를 수행해야했습니다. 1000 자로 구성된 비교적 짧은 문자열을 조작하는 알고리즘이 있다고 가정 해 봅시다. 평균적으로 해당 문자열의 각 문자는 ~ 100 배로 바뀔 것으로 예상됩니다. 따라서 다음과 같이 테스트하는 코드는 다음과 같습니다.

var str = "... {A LARGE STRING HERE} ...";

for(var i=0; i<100000; i++)
{
  var n = '' + Math.floor(Math.random() * 10);
  var p = Math.floor(Math.random() * 1000);
  // replace character *n* on position *p*
}

나는 이것을 위해 바이올린을 만들었고 여기 있습니다 . TEST1 (하위 문자열)과 TEST2 (배열 변환)의 두 가지 테스트가 있습니다.

결과 :

  • 테스트 1 : 195ms
  • 테스트 2 : 6ms

배열 변환이 하위 문자열보다 2 배 더 큰 것 같습니다! 그래서-도대체 여기서 무슨 일이 있었나요 ???

실제로 일어나는 일은 TEST2의 모든 연산이와 같은 할당 표현식을 사용하여 배열 자체에서 수행된다는 것 strarr2[p] = n입니다. 할당은 큰 문자열의 하위 문자열과 비교할 때 실제로 빠르며 승리 할 것입니다.

따라서 작업에 적합한 도구를 선택하는 것이 중요합니다. 다시.


답변

벡터를 사용한 작업은 일반적으로 문자열에 가장 효과적입니다.

다음 기능을 제안합니다.

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}

이 스 니펫을 실행하십시오.

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}

var str = "hello world";
str = str.replaceAt(3, "#");

document.write(str);

답변

자바 스크립트에서 문자열은 변경할 수 없으므로 다음과 같은 작업을 수행해야합니다

var x = "Hello world"
x = x.substring(0, i) + 'h' + x.substring(i+1);

i에서 x의 문자를 ‘h’로 바꾸려면