আমি অন্য স্ট্রিংয়ের একটি নির্দিষ্ট সূচীতে একটি স্ট্রিং কীভাবে ?োকাতে পারি?
var txt1 = "foo baz"
ধরুন আমি "ফু" এর পরে "বার" toোকাতে চাই কীভাবে আমি এটি অর্জন করতে পারি?
আমি ভেবেছিলাম substring()
, তবে অবশ্যই আরও সহজ সরল পথ হতে হবে।
আমি অন্য স্ট্রিংয়ের একটি নির্দিষ্ট সূচীতে একটি স্ট্রিং কীভাবে ?োকাতে পারি?
var txt1 = "foo baz"
ধরুন আমি "ফু" এর পরে "বার" toোকাতে চাই কীভাবে আমি এটি অর্জন করতে পারি?
আমি ভেবেছিলাম substring()
, তবে অবশ্যই আরও সহজ সরল পথ হতে হবে।
উত্তর:
আপনি স্ট্রিংয়ে নিজের প্রোটোটাইপ করতে পারেন splice()
।
if (!String.prototype.splice) {
/**
* {JSDoc}
*
* The splice() method changes the content of a string by removing a range of
* characters and/or adding new characters.
*
* @this {String}
* @param {number} start Index at which to start changing the string.
* @param {number} delCount An integer indicating the number of old chars to remove.
* @param {string} newSubStr The String that is spliced in.
* @return {string} A new string with the spliced substring.
*/
String.prototype.splice = function(start, delCount, newSubStr) {
return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
};
}
String.prototype.splice = function(idx, rem, str) {
return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};
var result = "foo baz".splice(4, 0, "bar ");
document.body.innerHTML = result; // "foo bar baz"
সম্পাদনা: এটি rem
একটি নিখুঁত মান তা নিশ্চিত করার জন্য এটি সংশোধন করে ।
slice
সমাধানটি আরও ভাল এবং সহজ। (স্প্লাইস ধ্বংসাত্মক, স্লাইস নয় এবং "আপনি জানেন না এমন অবজেক্টগুলিকে সংশোধন করা এড়ানো ভাল))। এই সমাধানটি একেবারে প্রথম দৃশ্যমান উত্তর হওয়া উচিত নয়, যদিও এটি সেই সময়টি বোধগম্য হয়েছিল।
my_array[my_array.length] = item
পরিবর্তে করতে চান my_array.push(item)
?
splice
এই ক্ষেত্রে ঠিক সম্পর্কে ; প্রকৃতপক্ষে স্ট্রিং অপরিবর্তনীয়। এই কারণে আমি মনে করি splice
যদিও এটি একটি দুর্বল কী শব্দ পছন্দ। আমার মূল আপত্তিটি প্রোটোটাইপগুলি নির্বিচারে প্রসারিত করার বিরুদ্ধে, যদি না তারা মানক পলফিল হয়।
নির্দিষ্ট সূচীতে সন্নিবেশ করানো (বরং প্রথম স্থানের অক্ষর থেকে বলার অপেক্ষা রাখে) স্ট্রিং স্লাইসিং / সাবস্ট্রিং ব্যবহার করতে হবে:
var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3);
substring
এখানে ঠিক আছে। আমি slice
সাধারণভাবে পছন্দ করি কারণ এটি আরও নমনীয় (নেতিবাচক সূচকগুলি, যেমন "foo baz".slice(1, -2)
)। এটি সামান্য খাটোও, খুব কম দামের জন্য।
`${txt1.slice(0,3)}bar${txt1.slice(3)}`
এখানে আমি লিখেছি এমন একটি পদ্ধতি যা অন্য সমস্ত প্রোগ্রামিং ভাষার মতো আচরণ করে:
String.prototype.insert = function(index, string) {
if (index > 0)
{
return this.substring(0, index) + string + this.substring(index, this.length);
}
return string + this;
};
//Example of use:
var something = "How you?";
something = something.insert(3, " are");
console.log(something)
{}
যদি-অন্য ব্লকগুলিতে আপনার কোঁকড়া ধনুর্বন্ধনী যুক্ত করতে হতে পারে ।
else
তা নিরর্থক।
কেবল নিম্নলিখিত ফাংশনটি করুন:
function insert(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}
এবং তারপরে এটি ব্যবহার করুন:
alert(insert("foo baz", 4, "bar "));
আউটপুট: ফু বার বাজ
এটি সি # (শার্প) স্ট্রিংয়ের মতো হুবহু আচরণ করে n
উল্লেখ্য: এই সন্নিবেশ ফাংশন টিপে স্ট্রিং মান (তৃতীয় প্যারামিটার) সামনে নিদিষ্ট পূর্ণসংখ্যা সূচক স্ট্রিং (দ্বিতীয় প্যারামিটার) Str (প্রথম প্যারামিটার), এবং তারপর পরিবর্তন না করে নতুন স্ট্রিং ফেরৎ Str !
আপডেট ২০১ 2016: এখানে ওয়ান-লাইনারের পদ্ধতির উপর ভিত্তি করে মজাদার (তবে আরও গুরুতর!) প্রোটোটাইপ ফাংশন রয়েছে RegExp
(প্রিপেন্ড সাপোর্ট সহ undefined
নেগেটিভ সহ index
):
/**
* Insert `what` to string at position `index`.
*/
String.prototype.insert = function(what, index) {
return index > 0
? this.replace(new RegExp('.{' + index + '}'), '$&' + what)
: what + this;
};
console.log( 'foo baz'.insert('bar ', 4) ); // "foo bar baz"
console.log( 'foo baz'.insert('bar ') ); // "bar foo baz"
পূর্ববর্তী (২০১২ -এ ফিরে) কেবল-মজাদার সমাধান:
var index = 4,
what = 'bar ';
'foo baz'.replace(/./g, function(v, i) {
return i === index - 1 ? v + what : v;
}); // "foo bar baz"
যদি কেউ স্ট্রিংয়ে একাধিক সূচকে পাঠ্য সন্নিবেশ করার উপায় খুঁজছেন তবে এটি ব্যবহার করে দেখুন:
String.prototype.insertTextAtIndices = function(text) {
return this.replace(/./g, function(character, index) {
return text[index] ? text[index] + character : character;
});
};
উদাহরণস্বরূপ, আপনি <span>
স্ট্রিংয়ের নির্দিষ্ট অফসেটগুলিতে ট্যাগগুলি সন্নিবেশ করানোর জন্য এটি ব্যবহার করতে পারেন :
var text = {
6: "<span>",
11: "</span>"
};
"Hello world!".insertTextAtIndices(text); // returns "Hello <span>world</span>!"
6: "<span>"
বলেছেন: 6 সূচীতে "<span>" পাঠ্য সন্নিবেশ করুন। আপনি কি বলছেন যে আপনি একটি পূর্ণসংখ্যার ভেরিয়েবলের সন্নিবেশ সূচক হিসাবে ব্যবহার করতে চান? যদি এটি হয় তবে এর মতো কিছু চেষ্টা করুনvar a=6, text = {}; text[a] = "<span>";
এটি মূলত যা করছে @ বাস 33 এগুলি করছে তা বাদ দিয়ে আমি শেষ থেকে গণনা করার জন্য একটি নেতিবাচক সূচক ব্যবহার করার বিকল্পটি দিচ্ছি। সাবস্ট্রিট পদ্ধতিটি পছন্দ করে।
// use a negative index to insert relative to the end of the string.
String.prototype.insert = function (index, string) {
var ind = index < 0 ? this.length + index : index;
return this.substring(0, ind) + string + this.substring(ind, this.length);
};
কেস ব্যবহার করুন: বলুন যে নামকরণের কনভেনশন ব্যবহার করে আপনার কাছে পূর্ণ আকারের চিত্র রয়েছে তবে থাম্বনেইল ইউআরএল সরবরাহ করতে ডেটা আপডেট করতে পারবেন না।
var url = '/images/myimage.jpg';
var thumb = url.insert(-4, '_thm');
// result: '/images/myimage_thm.jpg'
আপনার বর্তমান উদাহরণ দেওয়া আপনি ফলাফল দ্বারা উভয় দ্বারা অর্জন করতে পারে
var txt2 = txt1.split(' ').join(' bar ')
অথবা
var txt2 = txt1.replace(' ', ' bar ');
তবে আপনি যেমন অনুমান করতে পারেন তা আপনি সরাসরি গুলেনের উদাহরণ থেকে এড়িয়ে যেতে পারেন।
এমন পরিস্থিতিতে যেখানে আপনি সত্যিকারের অক্ষর সূচক-ভিত্তিক অন্য কোনও অনুমান করতে পারবেন না, তখন আমি সত্যিই একটি স্ট্রিং সমাধান সমাধান করতে চাই।
my_string = "hello world";
my_insert = " dear";
my_insert_location = 5;
my_string = my_string.split('');
my_string.splice( my_insert_location , 0, my_insert );
my_string = my_string.join('');
আমি জানি এটি একটি পুরানো থ্রেড, তবে, এখানে একটি সত্যিকারের কার্যকর পদ্ধতি is
var tn = document.createTextNode("I am just to help")
t.insertData(10, "trying");
এটির মধ্যে দুর্দান্ত যা হ'ল এটি নোড সামগ্রীকে জোর করে। সুতরাং যদি এই নোডটি ইতিমধ্যে ডোমটিতে থাকে, আপনার কোনও কোয়েরি নির্বাচক ব্যবহার করতে বা অভ্যন্তরীণ পাঠ্য আপডেট করার দরকার পড়েনি। পরিবর্তনগুলি এর বাঁধাইয়ের কারণে প্রতিফলিত হবে।
আপনার যদি স্ট্রিং দরকার হয়, কেবল নোডের পাঠ্য সামগ্রীর সম্পত্তি অ্যাক্সেস করুন।
tn.textContent
#=> "I am just trying to help"
ভাল, আমরা উভয় স্ট্রিং এবং স্লাইস পদ্ধতি ব্যবহার করতে পারি।
String.prototype.customSplice = function (index, absIndex, string) {
return this.slice(0, index) + string+ this.slice(index + Math.abs(absIndex));
};
String.prototype.replaceString = function (index, string) {
if (index > 0)
return this.substring(0, index) + string + this.substring(index, this.length);
return string + this;
};
console.log('Hello Developers'.customSplice(6,0,'Stack ')) // Hello Stack Developers
console.log('Hello Developers'.replaceString(6,'Stack ')) //// Hello Stack Developers
সাবস্ট্রিং পদ্ধতির একমাত্র সমস্যা হ'ল এটি নেতিবাচক সূচকের সাথে কাজ করবে না। এটি সর্বদা 0 তম অবস্থান থেকে স্ট্রিং সূচক গ্রহণ করে।
function insertString(string, insertion, place) {
return string.replace(string[place] + string[place + 1], string[place] + insertion + string[place + 1])
}
সুতরাং, আপনার জন্য, এটি হবে insertString("foo baz", "bar", 3);
স্পষ্টতই, এটি ব্যবহার করার জন্য একটি পেইন্ট হবে কারণ আপনাকে প্রতিবার ফাংশনে আপনার স্ট্রিং সরবরাহ করতে হবে তবে এই মুহুর্তে আমি জানি না কীভাবে এটিকে এর মতো সহজ কিছুতে পরিণত করা যায় string.replace(insertion, place)
। যদিও ধারণাটি এখনও দাঁড়িয়ে আছে।
আপনি গতিশীল প্যাটার্ন সহ নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন ।
var text = "something";
var output = " ";
var pattern = new RegExp("^\\s{"+text.length+"}");
var output.replace(pattern,text);
আউটপুট:
"something "
text.length
স্ট্রিংয়ের শুরুতে এটি হোয়াইটস্পেস অক্ষরের পরিবর্তে output
। RegExp
মানে ^\
- একটি লাইনের শুরু \s
কোনো সাদা স্থান অক্ষর, পুনরাবৃত্তি {n}
বার এই ক্ষেত্রে text.length
। স্ট্রিংয়ের বাইরে এই ধরণের নিদর্শনগুলি তৈরি করার সময় ব্যাকস্ল্যাশগুলি \\
থেকে \
বাঁচতে ব্যবহার করুন ।
আর একটি সমাধান, 2 এ স্ট্রিং কেটে এর মাঝে একটি স্ট্রিং দিন।
var str = jQuery('#selector').text();
var strlength = str.length;
strf = str.substr(0 , strlength - 5);
strb = str.substr(strlength - 5 , 5);
jQuery('#selector').html(strf + 'inserted' + strb);
আপনি কোডের এক লাইনে regexp দিয়ে এটি সহজেই করতে পারেন
const str = 'Hello RegExp!';
const index = 6;
const insert = 'Lovely ';
//'Hello RegExp!'.replace(/^(.{6})(.)/, `$1Lovely $2`);
const res = str.replace(new RegExp(`^(.{${index}})(.)`), `$1${insert}$2`);
console.log(res);
"হ্যালো লাভলি রেজিপ এক্স!"
আপনি ব্যবহার করতে পারেন slice(0,index) + str + slice(index)
। অথবা আপনি এটির জন্য একটি পদ্ধতি তৈরি করতে পারেন।
String.prototype.insertAt = function(index,str){
return this.slice(0,index) + str + this.slice(index)
}
console.log("foo bar".insertAt(4,'baz ')) //foo baz bar
আপনি split()
মূল স্ট্রিং করতে পারেন এবং তারপরে সাধারণ ব্যবহার করতে পারেনsplice()
String.prototype.splice = function(index,del,...newStrs){
let str = this.split('');
str.splice(index,del,newStrs.join('') || '');
return str.join('');
}
var txt1 = "foo baz"
//inserting single string.
console.log(txt1.splice(4,0,"bar ")); //foo bar baz
//inserting multiple strings
console.log(txt1.splice(4,0,"bar ","bar2 ")); //foo bar bar2 baz
//removing letters
console.log(txt1.splice(1,2)) //f baz
//remving and inseting atm
console.log(txt1.splice(1,2," bar")) //f bar baz
পদ্ধতিটিতে অ্যারের প্রতিটি উপাদানকে একটি একক উপস্থাপন করে অ্যারের একটি অ্যারে লাগে splice()
।
String.prototype.splice = function(index,del,...newStrs){
let str = this.split('');
str.splice(index,del,newStrs.join('') || '');
return str.join('');
}
String.prototype.mulSplice = function(arr){
str = this
let dif = 0;
arr.forEach(x => {
x[2] === x[2] || [];
x[1] === x[1] || 0;
str = str.splice(x[0] + dif,x[1],...x[2]);
dif += x[2].join('').length - x[1];
})
return str;
}
let txt = "foo bar baz"
//Replacing the 'foo' and 'bar' with 'something1' ,'another'
console.log(txt.splice(0,3,'something'))
console.log(txt.mulSplice(
[
[0,3,["something1"]],
[4,3,["another"]]
]
))
আমি স্ট্রিং ব্যবহার করে পদ্ধতিটি এবং বেস 33 এবং ব্যবহারকারী 113716 থেকে স্লাইস ব্যবহার করে যথাক্রমে তুলনা করতে চেয়েছিলাম, যাতে আমি কিছু কোড লিখেছিলাম
এছাড়াও এই পারফরম্যান্স তুলনা, সাবস্ট্রিং, টুকরা তাকান
আমার ব্যবহৃত কোডটি বিশাল স্ট্রিং তৈরি করে এবং স্ট্রিংটিকে "বার" একাধিকবার বিশাল স্ট্রিংয়ে সন্নিবেশ করায়
if (!String.prototype.splice) {
/**
* {JSDoc}
*
* The splice() method changes the content of a string by removing a range of
* characters and/or adding new characters.
*
* @this {String}
* @param {number} start Index at which to start changing the string.
* @param {number} delCount An integer indicating the number of old chars to remove.
* @param {string} newSubStr The String that is spliced in.
* @return {string} A new string with the spliced substring.
*/
String.prototype.splice = function (start, delCount, newSubStr) {
return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
};
}
String.prototype.splice = function (idx, rem, str) {
return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};
String.prototype.insert = function (index, string) {
if (index > 0)
return this.substring(0, index) + string + this.substring(index, this.length);
return string + this;
};
function createString(size) {
var s = ""
for (var i = 0; i < size; i++) {
s += "Some String "
}
return s
}
function testSubStringPerformance(str, times) {
for (var i = 0; i < times; i++)
str.insert(4, "bar ")
}
function testSpliceStringPerformance(str, times) {
for (var i = 0; i < times; i++)
str.splice(4, 0, "bar ")
}
function doTests(repeatMax, sSizeMax) {
n = 1000
sSize = 1000
for (var i = 1; i <= repeatMax; i++) {
var repeatTimes = n * (10 * i)
for (var j = 1; j <= sSizeMax; j++) {
var actualStringSize = sSize * (10 * j)
var s1 = createString(actualStringSize)
var s2 = createString(actualStringSize)
var start = performance.now()
testSubStringPerformance(s1, repeatTimes)
var end = performance.now()
var subStrPerf = end - start
start = performance.now()
testSpliceStringPerformance(s2, repeatTimes)
end = performance.now()
var splicePerf = end - start
console.log(
"string size =", "Some String ".length * actualStringSize, "\n",
"repeat count = ", repeatTimes, "\n",
"splice performance = ", splicePerf, "\n",
"substring performance = ", subStrPerf, "\n",
"difference = ", splicePerf - subStrPerf // + = splice is faster, - = subStr is faster
)
}
}
}
doTests(1, 100)
পারফরম্যান্সের সাধারণ পার্থক্য সর্বোত্তমভাবে প্রান্তিক এবং উভয় পদ্ধতিই ঠিক সূক্ষ্মভাবে কাজ করে (এমনকি দৈর্ঘ্যের স্ট্রিং ~~ 12000000 এও)
এই পদ্ধতির সুবিধাগুলি দ্বিগুণ:
const pair = Array.from('USDGBP')
pair.splice(3, 0, '/')
console.log(pair.join(''))