780 Stimmen

Wie kann ich ein Zeichen an einem bestimmten Index in JavaScript ersetzen?

Ich habe eine Zeichenkette, sagen wir mal Hello world und ich muss das Zeichen bei Index 3 ersetzen. Wie kann ich ein Zeichen durch Angabe eines Indexes ersetzen?

var str = "hello world";

Ich brauche etwas wie

str.replaceAt(0,"h");

35voto

Fabio Phms Punkte 9164

Die Arbeit mit Vektoren ist in der Regel am effektivsten, um String zu kontaktieren.

Ich schlage die folgende Funktion vor:

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

Führen Sie diesen Ausschnitt aus:

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);

34voto

DevDevDev Punkte 4919

In Javascript sind Strings unveränderlich, so dass Sie etwas tun müssen wie

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

Das Zeichen in x bei i wird durch 'h' ersetzt

21voto

Vikramaditya Punkte 5046
function dothis() {
  var x = document.getElementById("x").value;
  var index = document.getElementById("index").value;
  var text = document.getElementById("text").value;
  var length = document.getElementById("length").value;
  var arr = x.split("");
  arr.splice(index, length, text);
  var result = arr.join("");
  document.getElementById('output').innerHTML = result;
  console.log(result);
}
dothis();

<input id="x" type="text" value="White Dog" placeholder="Enter Text" />
<input id="index" type="number" min="0"value="6" style="width:50px" placeholder="index" />
<input id="length" type="number" min="0"value="1" style="width:50px" placeholder="length" />
<input id="text" type="text" value="F" placeholder="New character" />
<br>
<button id="submit" onclick="dothis()">Run</button>
<p id="output"></p>

Diese Methode eignet sich gut für kurze Zeichenfolgen, kann aber bei größeren Texten langsam sein.

var x = "White Dog";
var arr = x.split(""); // ["W", "h", "i", "t", "e", " ", "D", "o", "g"]
arr.splice(6, 1, 'F');

/* 
  Here 6 is starting index and 1 is no. of array elements to remove and 
  final argument 'F' is the new character to be inserted. 
*/
var result = arr.join(""); // "White Fog"

19voto

Afanasii Kurakin Punkte 3052

Einzeiler unter Verwendung von String.replace mit Callback (keine Emoji-Unterstützung):

// 0 - index to replace, 'f' - replacement string
'dog'.replace(/./g, (c, i) => i == 0? 'f': c)
// "fog"

Erklärt:

//String.replace will call the callback on each pattern match
//in this case - each character
'dog'.replace(/./g, function (character, index) {
   if (index == 0) //we want to replace the first character
     return 'f'
   return character //leaving other characters the same
})

12voto

Stephen Quan Punkte 16456

Verallgemeinert man die Antwort von Afanasii Kurakin, ergibt sich folgendes:

function replaceAt(str, index, ch) {
    return str.replace(/./g, (c, i) => i == index ? ch : c);
}

let str = 'Hello World';
str = replaceAt(str, 1, 'u');
console.log(str); // Hullo World

Erweitern und erklären wir sowohl den regulären Ausdruck als auch die Ersetzerfunktion:

function replaceAt(str, index, newChar) {
    function replacer(origChar, strIndex) {
        if (strIndex === index)
            return newChar;
        else
            return origChar;
    }
    return str.replace(/./g, replacer);
}

let str = 'Hello World';
str = replaceAt(str, 1, 'u');
console.log(str); // Hullo World

Der reguläre Ausdruck . entspricht genau einem Zeichen. Die g lässt es jedes Zeichen in einer for-Schleife abgleichen. Die replacer Funktion wird mit dem Originalzeichen und dem Index des Zeichens in der Zeichenkette aufgerufen. Wir machen eine einfache if Anweisung, um zu bestimmen, ob wir entweder origChar ou newChar .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X