আমি কীভাবে জাভাস্ক্রিপ্টের কোনও নির্দিষ্ট সূচকে একটি চরিত্রকে প্রতিস্থাপন করব?


544

আমার একটি স্ট্রিং রয়েছে, আসুন বলুন Hello worldএবং আমাকে সূচক 3 এ চরটি প্রতিস্থাপন করতে হবে আমি কীভাবে একটি সূচক নির্দিষ্ট করে একটি চরটি প্রতিস্থাপন করতে পারি?

var str = "hello world";

আমার মতো কিছু দরকার

str.replaceAt(0,"h");

130
কী অদ্ভুত যে str[0] = 'x'কোনও ত্রুটি ছুঁড়েছে বলে মনে হচ্ছে না, তবুও কাঙ্ক্ষিত প্রভাব নেই!
মাইকেল

6
@ মিশেল এটি দিয়ে যে আপনি সূচকটি 0 এ পাবেন, এটি 'x' এ সেট করুন, সেই বিবৃতি নিজেই নতুন মানটি ফিরিয়ে আনবে; 'এক্স'. তবে এর সবগুলিই মূল পরিবর্তন করে না, তাই এটি পুরোপুরি কার্যকর, আপনি যা প্রত্যাশা করেছিলেন তা নয় not এটি কোনও রেফারেন্স নয়
পল শিহেল্তেমা

8
"use strict"সক্রিয় করা থাকলে মিশেল এটি করেন : Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'(কমপক্ষে ওয়েবকিট ব্রাউজারগুলিতে)
জানু তুরো

1
জাভাস্ক্রিপ্ট স্ট্রিংগুলি অপরিবর্তনীয়, এগুলি "জায়গায়" সংশোধন করা যায় না সুতরাং আপনি কোনও একক অক্ষর পরিবর্তন করতে পারবেন না। প্রকৃতপক্ষে একই স্ট্রিংয়ের প্রতিটি উপস্থিতি একটি অবজেক্ট।
মার্টিজন শেফার

ঠিক আছে, উত্তরটি দেখুন: ডি
মার্টিজন শেফার

উত্তর:


611

জাভাস্ক্রিপ্টে স্ট্রিংগুলি অপরিবর্তনীয় , যার অর্থ আপনি পরিবর্তিত সামগ্রীর সাহায্যে একটি নতুন স্ট্রিং তৈরি করতে এবং ভেরিয়েবলটিকে এটিতে নির্দেশিত করাই সেরা means

আপনাকে নিজেরাই 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
নোট করুন যে বেস জাভাস্ক্রিপ্ট ক্লাসগুলি বাড়ানো সাধারণত ভাল ধারণা নয়। পরিবর্তে একটি সরল ইউটিলিটি ফাংশন ব্যবহার করুন।
এটস গোলাল

86
আমি অবশ্যই জিজ্ঞাসা করব কেন? এই উদ্দেশ্যে প্রোটোটাইপ সমর্থন রয়েছে।
সেম কল্যাঙ্কু

30
@ কেমকল্যাঙ্কু: এটি অন্যান্য লাইব্রেরির সাথে কোড প্লেটিকে খারাপ করতে পারে। তবে আমি নিজে কখনও এটিকে কামড়ামিনি।
অ্যালেক্স

6
@ অ্যালেক্স: আপনি এ সম্পর্কে ঠিক বলেছেন, সেই ফাংশনটি সম্পাদন করার আগে আপনার সত্যই তা পরীক্ষা করা উচিত। তবে এখনও যদি তা করে তবে এটি ঠিক একই অপারেশন করা উচিত।
কেম কল্যাঙ্কু

80
আমি দ্বিমত পোষণ করছি, এমনকি যদি আপনি সনাক্ত করেন যে ফাংশনটি পরবর্তী গ্রন্থাগারটি রয়েছে তখনও একই ধরণের ফাংশনটি ব্যবহার / তৈরি করতে পারে - 2 খারাপ ধারণা আরও খারাপ করে তোলে। সাধারণভাবে, কেবল কখনও অন্যান্য লোকের কোডের সাথে ঘুরে দেখবেন না (মূল সিস্টেমটি অন্তর্ভুক্ত করুন)। একটি নতুন ফাংশন তৈরি করুন।
শহীদ

93

replaceAtজাভাস্ক্রিপ্টে কোনও ফাংশন নেই । আপনি নির্দিষ্ট অবস্থানে যে কোনও স্ট্রিংয়ের কোনও অক্ষর প্রতিস্থাপন করতে নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

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>



আমি এই সমাধানটি পছন্দ করি কারণ আপনি এটির সাথে একটি একক অক্ষর প্রতিস্থাপন করতে পারেন। সর্বাধিক উন্নতিযুক্ত সমাধানটি যদি আপনি কেবল একটি চরিত্রকে প্রতিস্থাপন করতে চান তবে কাজ করে না। এটি কেবলমাত্র দুটি চরিত্রের পরিবর্তে কাজ করে! এছাড়াও, সাবস্ট্রারটিকে আরও অনেক মন্তব্যে উল্লিখিত সাবস্ট্রিংয়ের সাথে প্রতিস্থাপন করা উচিত।
gignu

74

আপনি পারবেন না। অবস্থানের আগে এবং পরে অক্ষরগুলি নিন এবং একটি নতুন স্ট্রিংয়ে কনক্যাট করুন:

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

আসলে, হ্যাঁ, আপনি পারেন তবে এটি একটি ওভারকিল হবে। প্রথম সূচি - 1 টি অক্ষর এড়াতে এবং সূচীতে অক্ষরটির সাথে মেলে আপনি নিয়মিত প্রকাশ করতে পারেন। আপনি সরাসরি, ইন-প্লেস রিপ্লেসমেন্ট করতে স্ট্রিং.রেপ্লেসটি নিয়মিত প্রকাশের সাথে ব্যবহার করতে পারেন। তবে এটি একটি ওভারকিল সুতরাং, অনুশীলনে আপনি পারবেন না। তবে তাত্ত্বিকভাবে, আপনি পারেন।
এটেস গোলাল

12
@ এটস: প্রতিস্থাপন ফাংশনটি কোনও স্থান-প্রতিস্থাপন করে না, এটি একটি নতুন স্ট্রিং তৈরি করে এবং এটি ফেরত দেয়।
গুফা

2
এমডিএনString.prototype.substring ওভার ব্যবহার করার পরামর্শ দেয় String.prototype.substr
মাইকিমিকে

33

এখানে প্রচুর উত্তর রয়েছে এবং এগুলি সমস্ত দুটি পদ্ধতির উপর ভিত্তি করে:

  • পদ্ধতি 1: দুটি সাবস্ট্রিং ব্যবহার করে স্ট্রিংটি বিভক্ত করুন এবং তাদের মধ্যে অক্ষরটি স্টফ করুন
  • পদ্ধতি 2: স্ট্রিংটি অক্ষর অ্যারেতে রূপান্তর করুন, একটি অ্যারে সদস্যকে প্রতিস্থাপন করুন এবং এতে যোগদান করুন

ব্যক্তিগতভাবে, আমি এই দুটি পদ্ধতি বিভিন্ন ক্ষেত্রে ব্যবহার করব। আমাকে বিস্তারিত বলতে দাও.

@ ফ্যাবিওএফএমএস: আপনার পদ্ধতিটি আমি প্রথমে ব্যবহার করেছি এবং আমি ভয় পেয়েছিলাম যে প্রচুর চরিত্রের সাথে এটি স্ট্রিংয়ে খারাপ। তবে, প্রশ্নটি অনেকগুলি চরিত্র কী? আমি এটি 10 ​​"লোরেম ইপসাম" অনুচ্ছেদে পরীক্ষা করেছি এবং এটি কয়েক মিলিসেকেন্ডে নিয়েছে। তারপরে আমি এটি 10 ​​গুণ বৃহত্তর স্ট্রিংয়ে পরীক্ষা করেছি - আসলে কোনও বড় পার্থক্য ছিল না। হুঁ।

@vsync, @ কোরি মাওহওয়ার্টার: আপনার মন্তব্যগুলি দ্ব্যর্থহীন; তবে, আবার, একটি বড় স্ট্রিং কি? আমি সম্মত হয়েছি যে ৩২ ... ১০০ কেবি পারফরম্যান্সের জন্য আরও ভাল হওয়া উচিত এবং চরিত্র প্রতিস্থাপনের এই ক্রিয়াকলাপের জন্য একটি স্ট্রিং-বৈকল্পিক ব্যবহার করা উচিত।

তবে আমাকে বেশ কয়েকটি প্রতিস্থাপন করতে হবে তবে কী হবে?

সেক্ষেত্রে দ্রুততর কি তা প্রমাণ করার জন্য আমার নিজের পরীক্ষা করা দরকার। ধরা যাক আমাদের একটি অ্যালগরিদম আছে যা তুলনামূলকভাবে একটি ছোট স্ট্রিংকে 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 (অ্যারে রূপান্তর)।

ফলাফল:

  • TEST1: 195ms
  • পরীক্ষা 2: 6 এসএম

দেখে মনে হচ্ছে অ্যারে রূপান্তরটি 2 মাত্রার ক্রম দিয়ে বিস্তৃত হয়েছে! তো - এখানে কি হয়েছে ???

আসলে যা ঘটে তা হ'ল টেস্ট 2-এ সমস্ত ক্রিয়াকলাপ অ্যারেতে করা হয়, যেমন অ্যাসাইনমেন্ট এক্সপ্রেশন ব্যবহার করে strarr2[p] = n। একটি বড় স্ট্রিংয়ের সাথে সাবস্ট্রিংয়ের তুলনায় অ্যাসাইনমেন্টটি আসলেই দ্রুত এবং এটি পরিষ্কার যে এটি জিতে চলেছে।

সুতরাং, এটি কাজের জন্য সঠিক সরঞ্জাম চয়ন সম্পর্কে about আবার।


7
আপনার পরীক্ষাটি jsperf- এ সরিয়ে নিয়েছে, বিস্তৃত ভিন্ন ফলাফল সহ: jsperf.com/string-replace-character । এটি কাজের জন্য সঠিক সরঞ্জামটি বেছে নেওয়ার বিষয়ে;)
কল্লিন

1
@ কল্লিন: আমি একমত সুতরাং আমি প্রায় আক্ষরিক jsfiddle থেকে jsperf পরীক্ষার ক্লোন করেছি। তবে, সঠিক সরঞ্জামটি ব্যবহার বাদ দিয়ে আপনাকে এটি সঠিক উপায়ে করতে হবে। সমস্যার দিকে মনোযোগ দিন, আমরা যদি আলগোরিদিমে বেশ কয়েকটি প্রতিস্থাপন করতে হয় তবে কী হবে তা নিয়ে আমরা কথা বলছি। কংক্রিট উদাহরণ 10000 প্রতিস্থাপন অন্তর্ভুক্ত। এর অর্থ একটি পরীক্ষায় 10000 প্রতিস্থাপন অন্তর্ভুক্ত করা উচিত। সুতরাং, jsperf ব্যবহার করে, আমি বেশ সামঞ্জস্যপূর্ণ ফলাফল পেয়েছি, দেখুন: jsperf.com/…
OzrenTkalcecKrznaric

1
এই কারণেই আমি জাভাস্ক্রিপ্ট পছন্দ করি না। যেমন ঘন ঘন, স্বজ্ঞাত, স্পষ্ট ব্যবহারের কেসগুলির জন্য ব্যবস্থা করা হয় না। আপনি মনে করেন জাভাস্ক্রিপ্টের লেখকদের ক্ষেত্রে এটি ঘটতে পারে যে লোকেরা স্ট্রিংয়ের মধ্যে অক্ষরগুলি প্রতিস্থাপন করতে পারে এবং তারা ভাষাতে সুবিধার পদ্ধতিগুলি রাখার সিদ্ধান্ত নিতে চাইবে।
আহ্নবিজক্যাড

1
@ কল্লিন ওজরেনটকালসেক ক্রজনারিকে আলাদা কিছু করেছেন। ওজরেনটাক্যালসেক ক্রজনারিক এই ধারণাটি তৈরি করেছিলেন যে স্ট্রিংটি স্থিতিশীল এবং এই বিভাজনটি রানের আগেই অনুকূলিত করা যায়। যা অগত্যা সত্য নয়। যদি আপনাকে প্রতিটি রানে বিভক্ত হতে হয় তবে ছোট স্ট্রিংগুলিতে স্ট্রিং পদ্ধতির দ্বিগুণ -4x দ্রুত এবং কেবল বড় স্ট্রিংটি দ্রুততর হয়। আমার মতে এটি বড় স্ট্যাটিক স্ট্রিংয়ে প্রচুর পরিমাণে পরিবর্তন ব্যতীত বেশিরভাগ ব্যবহারের ক্ষেত্রে স্ট্রাস্টিংকে আরও ভাল প্রয়োগকরণ করে তোলে।
ওয়াইআর

3
সমস্যাটি হ'ল টেস্ট 2-এ বিভাজন এবং যোগদানটি লুপের বাইরে থাকে, যেখানে আপনি একাধিক এক (অন্যায়) এর সাথে একক চর প্রতিস্থাপনের তুলনা করেন, প্রথম পদ্ধতিটি একক প্রতিস্থাপনের জন্য দ্রুত এবং দ্বিতীয়টি একের পর এক শৃঙ্খল প্রতিস্থাপনের জন্য ভাল is
40

32

ভেক্টরগুলির সাথে কাজ করা স্ট্রিংয়ের সাথে যোগাযোগের জন্য সবচেয়ে কার্যকর।

আমি নিম্নলিখিত ফাংশন পরামর্শ:

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
আপনার যদি প্রচুর অক্ষর পরিবর্তন করতে হয় তবে এটি কার্যকর।
শেপি

6
আমি জেএসপিফের উপর একটি পরীক্ষা তৈরি করেছি: jsperf.com/replace-character-by-index - সাবস্ট্রাস্টটি 32 গিগাবাইট থেকে 100 কেবি পর্যন্ত সুগঠিত। আমি এটিকে উন্নত করেছিলাম এবং যতটা বলতে আমাকে কষ্ট দেয়, যদিও এটি আরও ভাল অনুভূত হয়, সাবস্ট্রট যে কোনও আকারের স্ট্রিংয়ের জন্য ভাল পছন্দ।
কোরি মাওহোটার

এটি বেশ অপ্রয়োজনীয়।
র‌দকো দিনভ

আপনি যদি জানেন যে আপনি ছোট স্ট্রিং ব্যবহার করতে চলেছেন তবে এটি একটি ভাল দ্রুত সমাধান। আপনি যদি প্রোটোটাইপগুলি প্রসারিত করতে ঠিক থাকেন তবে আপনি 2 লাইনে অনুরূপ আচরণ অর্জন করতে পারেন:Array.prototype.replace = function(index, val) { this[index] = val; return this; }; 'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
মাইকেল প্লাটজ

29

জাভাস্ক্রিপ্টে স্ট্রিংগুলি অপরিবর্তনীয় তাই আপনাকে এর মতো কিছু করতে হবে

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

X এ অক্ষরটি 'h' দিয়ে প্রতিস্থাপন করতে


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

4
পরিষ্কার এবং সহজ, তবে বর্তমানে ব্যবহারের সময় ইমোজি (যেমন 😀) এর সাথে কাজ করবে না splitএবংjoin
গ্রিন

1
এস With সহ আমি মনে করি যে অ্যারে.ফ্রম (স্ট্র্যাম) এখন একটি ভাল বিকল্প হতে পারে তবে আমি সেই জ্ঞানটি নিয়ে এখানে এসেছি এবং আপনার কাছ থেকে সংক্ষিপ্তভাবে কিছু শিখেছি তাই আপনাকে ধন্যবাদ!
ডেভিড কামার

7

কলব্যাক সহ স্ট্রিং.রেপ্লেস ব্যবহার করে ওয়ান-লাইনার (কোনও ইমোজি সমর্থন নেই):

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

@ কেমকল্যাঙ্কু: দুর্দান্ত উত্তরের জন্য ধন্যবাদ!

এটিকে আরও অ্যারে.স্প্লাইস পদ্ধতির মতো করে তুলতে আমি এটি কিছুটা মানিয়ে নিয়েছি (এবং @ এটসের নোটটি বিবেচনায় নিয়েছি):

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টাইপ কার্যকারিতার সাথে সামঞ্জস্যপূর্ণ ।
স্ক্রিমোথি


3

আপনি চেষ্টা করতে পারেন

var strArr = str.split("");

strArr[0] = 'h';

str = strArr.join("");

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

আফসানসি কুরকিনের জবাবকে সাধারণীকরণ করা, আমাদের কাছে রয়েছে:

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

আসুন নিয়মিত অভিব্যক্তি এবং replacer ফাংশন উভয় প্রসারিত এবং ব্যাখ্যা:

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নির্ধারিত করার জন্য একটি সাধারণ বিবৃতি দিই origCharবা আমরা ফিরে যাব কিনা newChar


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-ভিত্তিক সূচক) এর সাথে প্রতিস্থাপন করতে চান তা বলুন 'Z'। আপনি এটি করতে ব্যবহার Regexকরতে পারেন।

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

কোনও ট্যাগ কেন এই ট্যাগ দরকারী না?
ksp

এই রেজেক্সটি কাজ করে কিনা তা আমি পরীক্ষা করে দেখিনি, তবে সম্ভবত এটি নিম্নচোটিত হয়েছে কারণ একটি স্টেট মেশিন (নিয়মিত প্রকাশ) সংকলন করার চেয়ে নতুন স্ট্রিং তৈরি করা সম্ভবত অনেক দ্রুত faster যা খুব ব্যয়বহুল।
ফেলো ভিলচেস 15

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

টেনারি এবং ম্যাপ অপারেটরটি ব্যবহার করে আমার সমাধানটি এখানে দেওয়া হল। আপনি যদি আমাকে জিজ্ঞাসা করেন তবে আরও পঠনযোগ্য, রক্ষণাবেক্ষণের সমাপ্তি আরও সহজ।

এটি এস 6 এবং সর্বোত্তম অনুশীলনের মধ্যে আরও বেশি।

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
আসলে না। আসলে এটি চরিত্রের প্রথম ঘটনাটি প্রতিস্থাপন করবে। এখনও ভুল।
টোমা জ্যাটো - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.