ฉันจะแทนที่อักขระที่ดัชนีเฉพาะใน JavaScript ได้อย่างไร


544

ฉันมีสตริงสมมติว่าHello worldและฉันต้องการแทนที่ถ่านที่ดัชนี 3 ฉันจะแทนที่ถ่านได้อย่างไรโดยการระบุดัชนี?

var str = "hello world";

ฉันต้องการบางสิ่งบางอย่าง

str.replaceAt(0,"h");

131
สิ่งที่แปลกคือstr[0] = 'x'ไม่ดูเหมือนจะโยนข้อผิดพลาด แต่ก็ไม่มีผลตามที่ต้องการ!
ไมเคิล

6
@Michael โดยที่คุณจะได้ดัชนีที่ 0 ตั้งค่าเป็น 'x' ข้อความนั้นจะส่งคืนค่าใหม่ 'X' แต่ทั้งหมดนั้นไม่เปลี่ยนจุดกำเนิดดังนั้นมันจึงใช้ได้อย่างสมบูรณ์แบบไม่ใช่สิ่งที่คุณคาดหวัง มันไม่ใช่การอ้างอิง
พอล Scheltema

8
@Michael จะทำอย่างไรถ้า"use strict"เปิดใช้งาน: Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'(อย่างน้อยในเบราว์เซอร์ webkit)
Jan Turoň

1
สตริง Javascript นั้นไม่สามารถเปลี่ยนแปลงได้พวกเขาไม่สามารถแก้ไข "ใน" เพื่อให้คุณไม่สามารถแก้ไขตัวอักษรเดียว ในความเป็นจริงการเกิดขึ้นของสายเดียวกันทุกคนเป็นวัตถุ
Martijn Scheffer

ตกลงดูคำตอบ: D
Martijn Scheffer

คำตอบ:


611

ใน 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

101
โปรดทราบว่าโดยทั่วไปไม่ควรขยายคลาส JavaScript พื้นฐาน ใช้ฟังก์ชั่นยูทิลิตี้ธรรมดาแทน
Ates Goral

86
ฉันต้องถามว่าทำไม การสนับสนุนต้นแบบมีไว้เพื่อจุดประสงค์นี้
Cem Kalyoncu

30
@CemKalyoncu: มันอาจทำให้โค้ดเล่นไม่ดีกับไลบรารี่อื่น ๆ แต่ฉันไม่เคยถูกกัดด้วยตัวเอง
alex

6
@alex: คุณพูดถูกคุณต้องตรวจสอบฟังก์ชั่นนั้นก่อนที่จะทำ แต่ถึงแม้ว่ามันจะทำเช่นนั้นก็ควรทำสิ่งเดียวกัน
Cem Kalyoncu

80
ฉันไม่เห็นด้วยแม้ว่าคุณจะตรวจพบว่าฟังก์ชั่นนั้นมีอยู่ในไลบรารีในภายหลังอาจยังคงใช้ / สร้างฟังก์ชั่นที่คล้ายกัน - 2 ความคิดที่ไม่ดีทำให้แย่ลง โดยทั่วไปแล้วไม่เคยเล่นกับคนอื่นรหัส (รวมถึงระบบหลัก) สร้างฟังก์ชั่นใหม่
martyman

93

ไม่มีreplaceAtฟังก์ชั่นใน JavaScript คุณสามารถใช้รหัสต่อไปนี้เพื่อแทนที่ตัวละครใด ๆ ในสายใด ๆ ที่ตำแหน่งที่ระบุ:

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>


4
สิ่งที่จะเก็บไว้ในใจ: ถือว่าเป็นฟังก์ชั่นเดิมและควรหลีกเลี่ยงเมื่อเป็นไปได้substr
Scott Tesler

ฉันจะแก้ปัญหานี้ก่อนเพราะคุณสามารถแทนที่ตัวละครเดียวด้วย โซลูชันที่มี upvotes มากที่สุดจะไม่ทำงานหากคุณต้องการแทนที่อักขระเพียงตัวเดียว ใช้งานได้เมื่อเปลี่ยนอักขระสองตัวเท่านั้น! นอกจากนี้ควรแทนที่สตริงย่อยด้วยสตริงย่อยตามที่กล่าวไว้ในความคิดเห็นอื่น ๆ
gignu

74

คุณทำไม่ได้ นำตัวละครทั้งก่อนและหลังตำแหน่งและเชื่อมต่อเป็นสตริงใหม่:

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

ที่จริงแล้วใช่คุณทำได้ แต่มันจะเกินความเป็นจริง คุณสามารถตั้งค่านิพจน์ทั่วไปเพื่อข้ามดัชนีแรก - 1 อักขระและจับคู่อักขระที่ดัชนี คุณสามารถใช้ String.replace กับนิพจน์ทั่วไปนั้นเพื่อทำการแทนที่โดยตรงแบบแทนที่ แต่มันก็เกินความจริง ดังนั้นในทางปฏิบัติคุณทำไม่ได้ แต่ในทางทฤษฎีคุณสามารถ
Ates Goral

12
@Ates: ฟังก์ชั่นแทนที่ไม่ได้ทำหน้าที่แทนที่มันจะสร้างสตริงใหม่และส่งกลับ
Guffa

2
MDNแนะนำให้ใช้มากกว่าString.prototype.substring String.prototype.substr
Mikemike

33

มีคำตอบมากมายที่นี่และทุกคำตอบมีสองวิธี:

  • วิธีที่ 1: แบ่งสตริงโดยใช้สตริงย่อยสองรายการและใช้อักขระระหว่างกัน
  • วิธีที่ 2: แปลงสตริงเป็นอาร์เรย์อักขระแทนที่สมาชิกอาเรย์หนึ่งตัวและเข้าร่วม

โดยส่วนตัวฉันจะใช้สองวิธีนี้ในกรณีที่แตกต่างกัน ให้ฉันอธิบาย

@ FabioPhms: วิธีการของคุณเป็นวิธีแรกที่ฉันใช้และฉันกลัวว่ามันจะไม่ดีในสายอักขระที่มีจำนวนมาก อย่างไรก็ตามคำถามคือตัวละครจำนวนมากคืออะไร? ฉันทดสอบในย่อหน้า 10 "lorem ipsum" และใช้เวลาไม่กี่มิลลิวินาที จากนั้นฉันทดสอบบนสตริงที่มีขนาดใหญ่กว่า 10 เท่า - มันไม่มีความแตกต่างกันมากนัก ฮึ่ม

@vsync, @Cory Mawhorter: ความคิดเห็นของคุณไม่น่าสงสัย อย่างไรก็ตามอีกครั้งสตริงขนาดใหญ่คืออะไร? ฉันยอมรับว่าสำหรับประสิทธิภาพ 32 ... 100kb ควรดีกว่าและควรใช้ substring-variant สำหรับการเปลี่ยนอักขระหนึ่งครั้ง

แต่จะเกิดอะไรขึ้นถ้าฉันต้องเปลี่ยนใหม่ไม่กี่ครั้ง?

ฉันต้องทำการทดสอบของตัวเองเพื่อพิสูจน์ว่าอะไรเร็วขึ้นในกรณีนั้น สมมติว่าเรามีอัลกอริทึมที่จะจัดการสตริงที่ค่อนข้างสั้นซึ่งประกอบด้วยอักขระ 1,000 ตัว เราคาดว่าโดยเฉลี่ยอักขระแต่ละตัวในสตริงนั้นจะถูกแทนที่ ~ 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 (การแปลงอาร์เรย์)

ผล:

  • TEST1: 195ms
  • TEST2: 6ms

ดูเหมือนว่าการแปลงอาเรย์จะเต้นย่อยด้วย 2 ขนาดของคำสั่ง! ดังนั้น - เกิดอะไรขึ้นที่นี่ ???

สิ่งที่เกิดขึ้นจริงคือว่าการดำเนินการทั้งหมดใน TEST2 strarr2[p] = nจะทำในอาร์เรย์ตัวเองโดยใช้การแสดงออกที่ได้รับมอบหมายเช่น การมอบหมายนั้นเร็วมากเมื่อเปรียบเทียบกับสตริงย่อยบนสตริงขนาดใหญ่และชัดเจนว่ามันจะชนะ

ดังนั้นมันคือทั้งหมดที่เกี่ยวกับการเลือกเครื่องมือที่เหมาะสมสำหรับงาน อีกครั้ง


7
ย้ายการทดสอบของคุณเพื่อ jsperf กับผลลัพธ์ที่แตกต่างกันอย่างมากมาย: jsperf.com/string-replace-character มันคือทั้งหมดที่เกี่ยวกับการเลือกเครื่องมือที่เหมาะสมสำหรับงาน;)
colllin

1
@colllin: ฉันเห็นด้วยอย่างแน่นอน ดังนั้นฉันเกือบจะโคลนการทดสอบจาก jsfiddle ถึง jsperf อย่างไรก็ตามนอกเหนือจากการใช้เครื่องมือที่เหมาะสมแล้วคุณต้องทำอย่างถูกวิธี ให้ความสนใจกับปัญหาเรากำลังพูดถึงสิ่งที่จะเกิดขึ้นถ้าเราต้องทำการเปลี่ยนในอัลกอริทึม ตัวอย่างที่เป็นรูปธรรมรวมถึงการแทนที่ 10,000 รายการ หมายความว่าการทดสอบหนึ่งครั้งควรมีการเปลี่ยน 10,000 ครั้ง ดังนั้นการใช้ jsperf ผมได้ผลที่สอดคล้องกันค่อนข้างดู: jsperf.com/...
OzrenTkalcecKrznaric

1
นี่คือเหตุผลที่ฉันไม่ชอบจาวาสคริปต์ กรณีการใช้งานที่ใช้งานง่ายและชัดเจนดังกล่าวไม่ได้ถูกจัดเตรียม คุณคิดว่ามันจะเกิดขึ้นกับผู้เขียนจาวาสคริปต์ที่ผู้คนอาจต้องการแทนที่ตัวละครภายในสตริงและพวกเขาต้องการที่จะใส่วิธีการอำนวยความสะดวกในภาษา
ahnbizcad

1
@colllin ทำสิ่งที่แตกต่างกับ OzrenTkalcecKrznaric OzrenTkalcecKrznaric ได้ทำการสันนิษฐานว่าสตริงนั้นเป็นแบบสแตติกและการแยกสามารถปรับให้เหมาะสมก่อนการรัน ซึ่งไม่จำเป็นต้องเป็นเรื่องจริง หากคุณต้องแยกทุกครั้งที่เรียกใช้วิธีการสตริงย่อยจะเร็วขึ้นประมาณสองเท่าในสตริงขนาดเล็กและเพิ่มเร็วขึ้นเท่านั้นเมื่อสตริงยิ่งใหญ่ ในความเห็นของฉันสิ่งนี้ทำให้ซับสตริงเป็นการนำไปใช้ที่ดีกว่าสำหรับกรณีใช้งานส่วนใหญ่ยกเว้นการเปลี่ยนแปลงจำนวนมากบนสแตติกสตริงขนาดใหญ่
WiR3D

3
ปัญหาคือใน test2 การแยกและการรวมอยู่นอก for for loop ซึ่งคุณเปรียบเทียบการแทนที่แบบเดี่ยวกับแบบหลายแบบ (ไม่ยุติธรรม) วิธีแรกจะเร็วกว่าสำหรับการแทนที่แบบเดี่ยวและแบบที่สองจะดีกว่าสำหรับการแทนที่แบบลูกโซ่
ΘεόφιλοςΜουρατίδης

32

การทำงานกับเวกเตอร์มักจะมีประสิทธิภาพมากที่สุดในการติดต่อ String

ฉันขอแนะนำฟังก์ชั่นต่อไปนี้:

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


9
นี่เป็นสิ่งที่ไม่ดีสำหรับสตริงจำนวนมากไม่จำเป็นต้องสร้างอาเรย์ที่มีจำนวนของเซลล์ที่บ้าคลั่งถ้าคุณสามารถใช้ซับสเตรตเพื่อตัดมันได้ ...
vsync

1
มีประโยชน์ถ้าคุณต้องการเปลี่ยนตัวละครมากมายและมันก็ง่าย
Sheepy

6
ฉันสร้างการทดสอบบน jsperf: jsperf.com/replace-character-by-index - Substr เป็นวิธีที่เร็วขึ้นและสอดคล้องจาก 32bytes ถึง 100kb ฉัน upvoting นี้และเท่าที่เจ็บฉันจะพูดแม้ว่าจะรู้สึกดีกว่า substr เป็นตัวเลือกที่ดีกว่าสำหรับสตริงที่มีขนาดใด
Cory Mawhorter

มันค่อนข้างจะไม่เหมาะสม
Radko Dinev

นี่เป็นวิธีแก้ปัญหาที่ดีถ้าคุณรู้ว่าคุณกำลังจะใช้สายเล็ก ๆ หากคุณโอเคกับการขยายต้นแบบแล้วคุณสามารถบรรลุพฤติกรรมที่คล้ายกันใน 2 สาย:Array.prototype.replace = function(index, val) { this[index] = val; return this; }; 'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
ไมเคิล Plautz

29

ในสตริง Javascript นั้นไม่เปลี่ยนรูปดังนั้นคุณต้องทำอะไรบางอย่าง

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

เมื่อต้องการแทนที่อักขระใน x at i ด้วย 'h'


28
str = str.split('');
str[3] = 'h';
str = str.join('');

4
ชัดเจนและเรียบง่าย แต่ปัจจุบันจะไม่ทำงานกับอิโมจิ (เช่น😀) เมื่อใช้splitและjoin
Green

1
ด้วย es6 ฉันคิดว่า Array.from (str) อาจเป็นตัวเลือกที่ดีกว่าตอนนี้ แต่ฉันมาที่นี่พร้อมกับความรู้นั้นและเรียนรู้บางสิ่งที่กระชับจากคุณดังนั้นขอบคุณ!
David Kamer

7

สายการบินเดียวที่ใช้ String.replace พร้อมด้วยการติดต่อกลับ (ไม่รองรับอิโมจิ):

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

อธิบาย:

//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
})

6

วิธีนี้เหมาะสำหรับสตริงความยาวขนาดเล็ก แต่อาจช้าสำหรับข้อความขนาดใหญ่

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

/* 
  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. 
*/

3

@CemKalyoncu: ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม!

ฉันปรับมันเล็กน้อยเพื่อให้เหมือนวิธี Array.splice (และนำโน้ตมาพิจารณา @Ates):

spliceString=function(string, index, numToDelete, char) {
      return string.substr(0, index) + char + string.substr(index+numToDelete);
   }

var myString="hello world!";
spliceString(myString,myString.lastIndexOf('l'),2,'mhole'); // "hello wormhole!"

ไม่แน่ใจว่าทำไมสิ่งนี้จึงถูกโหวต มันเป็นคำตอบที่ถูกต้อง มันทำงานตามที่ระบุไว้ และมันสอดคล้องกับArray.spliceฟังก์ชั่นประเภท
Scrimothy



2

หากคุณต้องการแทนที่ตัวอักษรในสตริงคุณควรสร้างสตริงที่ไม่แน่นอน นี่คืออาร์เรย์อักขระ คุณสามารถสร้างโรงงาน:

  function MutableString(str) {
    var result = str.split("");
    result.toString = function() {
      return this.join("");
    }
    return result;
  }

จากนั้นคุณสามารถเข้าถึงอักขระและอาร์เรย์ทั้งหมดจะแปลงเป็นสตริงเมื่อใช้เป็นสตริง:

  var x = MutableString("Hello");
  x[0] = "B"; // yes, we can alter the character
  x.push("!"); // good performance: no new string is created
  var y = "Hi, "+x; // converted to string: "Hi, Bello!"

2

การสรุปคำตอบของ Afanasii Kurakin เรามี:

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

ลองขยายและอธิบายทั้งนิพจน์ปกติและฟังก์ชันตัวแทนที่:

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

การแสดงออกปกติ.ตรงกับตัวละครหนึ่งตัว gทำให้มันตรงกับตัวละครทุกตัวในห่วง replacerฟังก์ชั่นที่เรียกว่าได้รับทั้งสองตัวละครเดิมและดัชนีของที่ตัวละครที่อยู่ในสตริง เราทำให้ง่ายifคำสั่งให้ตรวจสอบว่าเรากำลังจะกลับมาอย่างใดอย่างหนึ่งหรือorigCharnewChar


2

คุณสามารถขยายประเภทสตริงเพื่อรวมวิธีการแทรก:

String.prototype.append = function (index,value) {
  return this.slice(0,index) + value + this.slice(index);
};

var s = "New string";
alert(s.append(4,"complete "));

จากนั้นคุณสามารถเรียกใช้ฟังก์ชัน:


1

ฉันทำฟังก์ชั่นที่คล้ายกับสิ่งที่คุณถามมันจะตรวจสอบว่าตัวละครในสตริงอยู่ในอาร์เรย์ของตัวละครที่ไม่ได้รับอนุญาตหรือไม่ถ้ามันแทนที่ด้วย ''

    var validate = function(value){
        var notAllowed = [";","_",">","<","'","%","$","&","/","|",":","=","*"];
        for(var i=0; i<value.length; i++){
            if(notAllowed.indexOf(value.charAt(i)) > -1){
               value = value.replace(value.charAt(i), "");
               value = validate(value);
            }
       }
      return value;
   }

1

สามารถทำได้อย่างง่ายดายด้วย RegExp!

const str = 'Hello RegEx!';
const index = 11;
const replaceWith = 'p';

//'Hello RegEx!'.replace(/^(.{11})(.)/, `$1p`);
str.replace(new RegExp(`^(.{${ index }})(.)`), `$1${ replaceWith }`);

//< "Hello RegExp"

1

นี่คือรุ่นที่ฉันคิดขึ้นมาหากคุณต้องการจัดสไตล์คำหรืออักขระแต่ละตัวที่ดัชนีของพวกเขาในการตอบสนอง / จาวาสคริปต์

replaceAt( yourArrayOfIndexes, yourString/orArrayOfStrings ) 

ตัวอย่างการทำงาน: https://codesandbox.io/s/ov7zxp9mjq

function replaceAt(indexArray, [...string]) {
    const replaceValue = i => string[i] = <b>{string[i]}</b>;
    indexArray.forEach(replaceValue);
    return string;
}

และนี่คือวิธีอื่น

function replaceAt(indexArray, [...string]) {
    const startTag = '<b>';
    const endTag = '</b>';
    const tagLetter = i => string.splice(i, 1, startTag + string[i] + endTag);
    indexArray.forEach(tagLetter);
    return string.join('');
}

เเละอีกอย่าง...

function replaceAt(indexArray, [...string]) {
    for (let i = 0; i < indexArray.length; i++) {
        string = Object.assign(string, {
          [indexArray[i]]: <b>{string[indexArray[i]]}</b>
        });
    }
    return string;
}

0

ฉันรู้ว่านี่เก่า แต่โซลูชันไม่ทำงานสำหรับดัชนีลบดังนั้นฉันจึงเพิ่มโปรแกรมแก้ไขลงไป หวังว่าจะช่วยใครบางคน

String.prototype.replaceAt=function(index, character) {
    if(index>-1) return this.substr(0, index) + character + this.substr(index+character.length);
    else return this.substr(0, this.length+index) + character + this.substr(index+character.length);

}

0

ช่วยบอกว่าคุณต้องการแทนที่Kthดัชนี (ดัชนี 0-based) 'Z'ด้วย คุณสามารถใช้Regexการทำเช่นนี้

var re = var re = new RegExp("((.){" + K + "})((.){1})")
str.replace(re, "$1A$`");

ความคิดใด ๆ ที่ทำให้แท็กนี้ไม่มีประโยชน์
ksp

ฉันไม่ได้ตรวจสอบว่า regex นี้ใช้งานได้หรือเปล่า
Felo Vilches

0

คุณสามารถใช้ฟังก์ชั่นต่อไปนี้เพื่อแทนที่CharacterหรือStringตำแหน่งใดตำแหน่งหนึ่งของสตริง เพื่อแทนที่กรณีการแข่งขันต่อไปนี้ทั้งหมดให้ใช้String.prototype.replaceAllMatches()ฟังก์ชัน

String.prototype.replaceMatch = function(matchkey, replaceStr, matchIndex) {
    var retStr = this, repeatedIndex = 0;
    for (var x = 0; (matchkey != null) && (retStr.indexOf(matchkey) > -1); x++) {
        if (repeatedIndex == 0 && x == 0) {
            repeatedIndex = retStr.indexOf(matchkey);
        } else { // matchIndex > 0
            repeatedIndex = retStr.indexOf(matchkey, repeatedIndex + 1);
        }
        if (x == matchIndex) {
            retStr = retStr.substring(0, repeatedIndex) + replaceStr + retStr.substring(repeatedIndex + (matchkey.length));
            matchkey = null; // To break the loop.
        }
    }
    return retStr;
};

ทดสอบ:

var str = "yash yas $dfdas.**";

console.log('Index Matched replace : ', str.replaceMatch('as', '*', 2) );
console.log('Index Matched replace : ', str.replaceMatch('y', '~', 1) );

เอาท์พุท:

Index Matched replace :  yash yas $dfd*.**
Index Matched replace :  yash ~as $dfdas.**

-1

นี่คือทางออกของฉันโดยใช้ผู้ประกอบการและแผนที่ ปลายอ่านง่ายและบำรุงรักษาง่ายต่อการเข้าใจถ้าคุณถามฉัน

มันมีมากขึ้นใน es6 และแนวทางปฏิบัติที่ดีที่สุด

function replaceAt() {
  const replaceAt = document.getElementById('replaceAt').value;

  const str = 'ThisIsATestStringToReplaceCharAtSomePosition';
  const newStr = Array.from(str).map((character, charIndex) => charIndex === (replaceAt - 1) ? '' : character).join('');

  console.log(`New string: ${newStr}`);
}
<input type="number" id="replaceAt" min="1" max="44" oninput="replaceAt()"/>


-3

วิธีการที่นี่ซับซ้อน ฉันจะทำแบบนี้:

var myString = "this is my string";
myString = myString.replace(myString.charAt(number goes here), "insert replacement here");

มันง่ายเหมือนที่ได้รับ


6
ไม่จริง ในความเป็นจริงมันจะแทนที่การเกิดขึ้นครั้งแรกของตัวละคร ยังคงผิด
Tomáš Zato - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.