জাভাস্ক্রিপ্ট জায়গা (বা ইন-জায়গা) একটি স্ট্রিং কিভাবে বিপরীত না হলে (ব্যবহার বিল্ট ইন ফাংশন ছাড়া, একটি ফিরতি বিবৃতি দিয়ে একটি ফাংশন প্রেরণ করা .reverse()
, .charAt()
ইত্যাদি)?
জাভাস্ক্রিপ্ট জায়গা (বা ইন-জায়গা) একটি স্ট্রিং কিভাবে বিপরীত না হলে (ব্যবহার বিল্ট ইন ফাংশন ছাড়া, একটি ফিরতি বিবৃতি দিয়ে একটি ফাংশন প্রেরণ করা .reverse()
, .charAt()
ইত্যাদি)?
উত্তর:
যতক্ষণ আপনি সাধারণ ASCII অক্ষরগুলি নিয়ে কাজ করছেন এবং আপনি অন্তর্নির্মিত ফাংশনগুলি ব্যবহার করে খুশি হন, এটি কাজ করবে:
function reverse(s){
return s.split("").reverse().join("");
}
আপনার যদি এমন কোনও সমাধানের প্রয়োজন হয় যা ইউটিএফ -16 বা অন্যান্য বহু-বাইট অক্ষরকে সমর্থন করে, তবে সচেতন হন যে এই ফাংশনটি মজাদার দেখাচ্ছে এমন অবৈধ ইউনিকোড স্ট্রিং বা বৈধ স্ট্রিংগুলি দেবে। পরিবর্তে আপনি এই উত্তরটি বিবেচনা করতে চাইতে পারেন ।
[... গুলি] ইউনিকোড সচেতন, একটি ছোট সম্পাদনা দেয়: -
function reverse(s){
return [...s].reverse().join("");
}
return [...s].reverse().join("");
কাজ করতে পারে।
নিম্নলিখিত কৌশলটি (বা অনুরূপ) সাধারণত জাভাস্ক্রিপ্টে স্ট্রিংটিকে বিপরীতে ব্যবহার করতে ব্যবহৃত হয়:
// Don’t use this!
var naiveReverse = function(string) {
return string.split('').reverse().join('');
}
আসলে, এখনও পর্যন্ত পোস্ট করা সমস্ত উত্তর এই প্যাটার্নের একটি বৈচিত্র। তবে এই সমাধানে কিছু সমস্যা রয়েছে। উদাহরণ স্বরূপ:
naiveReverse('foo 𝌆 bar');
// → 'rab �� oof'
// Where did the `𝌆` symbol go? Whoops!
আপনি যদি ভাবছেন যে কেন এটি ঘটে থাকে তবে জাভাস্ক্রিপ্টের অভ্যন্তরীণ অক্ষর এনকোডিংটি পড়ুন । (টিএল; ডিআর: 𝌆
একটি জ্যোতিষী প্রতীক, এবং জাভাস্ক্রিপ্ট এটিকে দুটি পৃথক কোড ইউনিট হিসাবে প্রকাশ করেছে))
তবে আরও রয়েছে:
// To see which symbols are being used here, check:
// http://mothereff.in/js-escapes#1ma%C3%B1ana%20man%CC%83ana
naiveReverse('mañana mañana');
// → 'anãnam anañam'
// Wait, so now the tilde is applied to the `a` instead of the `n`? WAT.
স্ট্রিং বিপরীত বাস্তবায়ন পরীক্ষা করার জন্য একটি ভাল স্ট্রিং নিম্নলিখিত :
'foo 𝌆 bar mañana mañana'
কেন? কারণ এটিতে একটি জ্যোতিষী প্রতীক রয়েছে ( 𝌆
) (যা জাভাস্ক্রিপ্টে সারোগেট জোড় দ্বারা উপস্থাপিত ) এবং একটি সংমিশ্রণ চিহ্ন রয়েছে (ñ
mañana
জোড় শেষটি আসলে দুটি প্রতীক নিয়ে থাকে: U + 006E ল্যাটিন স্মার্ট লেটার এন এবং ইউ + 0303 কম্বিং টিলডি)।
যে ক্রমে সারোগেট জুটি প্রদর্শিত হবে তা বিপরীত করা যাবে না, অন্যথায় জ্যোতির্বিজ্ঞানের চিহ্নটি 'বিপরীত' স্ট্রিংটিতে আর প্রদর্শিত হবে না। এজন্য আপনি সেগুলি দেখেছেন��
পূর্ববর্তী উদাহরণের জন্য আউটপুটে চিহ্নগুলি ।
সম্মিলিত চিহ্নগুলি সর্বদা পূর্ববর্তী প্রতীকটিতে প্রয়োগ করা হয়, সুতরাং আপনাকে সামগ্রিক সংমিশ্রণ চিহ্ন হিসাবে (ইউ + 006E ল্যাটিন স্মার্ট লেটার এন) উভয়ই বিবেচনা করতে হবে U তাদের ক্রমটি বিপরীত করা সংমিশ্রণ চিহ্নটিকে স্ট্রিংয়ের অন্য একটি চিহ্নের সাথে জোড় করে দেবে। উদাহরণস্বরূপ ã
পরিবর্তে উদাহরণ আউটপুট ছিল যে কেনñ
।
আশা করি, এ পর্যন্ত পোস্ট করা সমস্ত উত্তর কেন ভুল তা ব্যাখ্যা করে ।
আপনার প্রাথমিক প্রশ্নের উত্তর দেওয়ার জন্য - কীভাবে [সঠিকভাবে] জাভাস্ক্রিপ্টে একটি স্ট্রিং বিপরীত করবেন -, আমি একটি ছোট জাভাস্ক্রিপ্ট লাইব্রেরি লিখেছি যা ইউনিকোড-সচেতন স্ট্রিং বিপরীত করতে সক্ষম। এটিতে আমি সবেমাত্র উল্লেখ করেছি এমন কোনও সমস্যা নেই doesn't গ্রন্থাগারকে Esrever বলা হয় ; এর কোডটি গিটহাবে রয়েছে এবং এটি কোনও জাভাস্ক্রিপ্ট পরিবেশে বেশ কার্যকর। এটি শেলের ইউটিলিটি / বাইনারি সহ আসে, তাই আপনি চাইলে সহজেই আপনার টার্মিনাল থেকে স্ট্রিংগুলি বিপরীত করতে পারেন।
var input = 'foo 𝌆 bar mañana mañana';
esrever.reverse(input);
// → 'anañam anañam rab 𝌆 oof'
"স্থান" অংশ হিসাবে, অন্যান্য উত্তর দেখুন।
String.prototype.reverse_string=function() {return this.split("").reverse().join("");}
অথবা
String.prototype.reverse_string = function() {
var s = "";
var i = this.length;
while (i>0) {
s += this.substring(i-1,i);
i--;
}
return s;
}
স্ট্রিং এবং তাদের কর্মক্ষমতা বিশদের বিপরীতে বিশ্লেষণ এবং দশটি ভিন্ন উপায়।
http://eddmann.com/posts/ten-ways-to-reverse-a-string-in-javascript/
এই বাস্তবায়নের পারফরম্যান্স:
প্রতি ব্রাউজারে সেরা পারফরম্যান্স বাস্তবায়ন (গুলি)
এই বাস্তবায়নগুলি এখানে:
বাস্তবায়ন 1:
function reverse(s) {
var o = '';
for (var i = s.length - 1; i >= 0; i--)
o += s[i];
return o;
}
বাস্তবায়ন 2:
function reverse(s) {
var o = [];
for (var i = s.length - 1, j = 0; i >= 0; i--, j++)
o[j] = s[i];
return o.join('');
}
বাস্তবায়ন 3:
function reverse(s) {
var o = [];
for (var i = 0, len = s.length; i <= len; i++)
o.push(s.charAt(len - i));
return o.join('');
}
বাস্তবায়ন 4:
function reverse(s) {
return s.split('').reverse().join('');
}
বাস্তবায়ন 5:
function reverse(s) {
var i = s.length,
o = '';
while (i > 0) {
o += s.substring(i - 1, i);
i--;
}
return o;
}
বাস্তবায়ন 6:
function reverse(s) {
for (var i = s.length - 1, o = ''; i >= 0; o += s[i--]) { }
return o;
}
বাস্তবায়ন 7:
function reverse(s) {
return (s === '') ? '' : reverse(s.substr(1)) + s.charAt(0);
}
বাস্তবায়ন 8:
function reverse(s) {
function rev(s, len, o) {
return (len === 0) ? o : rev(s, --len, (o += s[len]));
};
return rev(s, s.length, '');
}
বাস্তবায়ন 9:
function reverse(s) {
s = s.split('');
var len = s.length,
halfIndex = Math.floor(len / 2) - 1,
tmp;
for (var i = 0; i <= halfIndex; i++) {
tmp = s[len - i - 1];
s[len - i - 1] = s[i];
s[i] = tmp;
}
return s.join('');
}
বাস্তবায়ন 10
function reverse(s) {
if (s.length < 2)
return s;
var halfIndex = Math.ceil(s.length / 2);
return reverse(s.substr(halfIndex)) +
reverse(s.substr(0, halfIndex));
}
পুরো "রিভার্স স্ট্রিং ইন স্ট্রিং" হ'ল একটি পুরানো সাক্ষাত্কার প্রশ্ন সি প্রোগ্রামার, এবং যে লোকেরা তাদের দ্বারা সাক্ষাত্কার নিয়েছিল (প্রতিশোধ নেওয়ার জন্য, সম্ভবত?), জিজ্ঞাসা করবে। দুর্ভাগ্যক্রমে, এটি "ইন প্লেস" অংশটি আর কাজ করে না কারণ কোনও পরিচালিত ভাষার (জেএস, সি # ইত্যাদি) স্ট্রিংগুলি অবিচ্ছেদ্য স্ট্রিং ব্যবহার করে, সুতরাং কোনও নতুন মেমরি বরাদ্দ না করে স্ট্রিং সরানোর পুরো ধারণাটিকে পরাস্ত করে।
যদিও উপরের সমাধানগুলি প্রকৃতপক্ষে একটি স্ট্রিংকে বিপরীত করে, আরও মেমরি বরাদ্দ না করে তারা তা করে না এবং এইভাবে শর্তগুলি পূরণ করে না। বরাদ্দ হিসাবে আপনার স্ট্রিংয়ের সরাসরি অ্যাক্সেস থাকা দরকার এবং এটির জায়গায় এটির বিপরীত করতে সক্ষম হওয়ার জন্য এটির আসল মেমরির অবস্থানটি ম্যানিপুলেট করতে সক্ষম হতে হবে।
ব্যক্তিগতভাবে, আমি সত্যিই এই ধরণের সাক্ষাত্কারের প্রশ্নগুলিকে ঘৃণা করি, তবে দুঃখের বিষয়, আমি নিশ্চিত যে আমরা সেগুলি আগামী কয়েক বছর ধরে দেখব।
প্রথমে Array.from()
একটি স্ট্রিংকে অ্যারেতে পরিণত করতে, তারপরে Array.prototype.reverse()
অ্যারেটিকে বিপরীত করতে এবং তারপরে Array.prototype.join()
আবার একটি স্ট্রিং তৈরি করতে ব্যবহার করুন।
const reverse = str => Array.from(str).reverse().join('');
reverse
যুক্তিটির পুনর্লিখন নেই ।
string.split('')
কাজ করে না। আরও ব্যাখ্যা জন্য এই উত্তর দেখুন ।
Array.from('foo 𝌆 bar mañana mañana').reverse().join('') == 'anãnam anañam rab 𝌆 oof'
Array.from('foo 𝌆 bar mañana mañana'.normalize('NFC')).reverse().join('')
হয়ে যাবে"anañam anañam rab 𝌆 oof"
ইসমাস্ক্রিপ্ট In-তে, আপনি স্প্রেড অপারেটরের মতো .split('')
স্প্লিট পদ্ধতি ব্যবহার না করেই আরও দ্রুত একটি স্ট্রিংকে বিপরীত করতে পারেন :
var str = [...'racecar'].reverse().join('');
string.split('')
চেয়ে বেশিরভাগ মানুষের কাছে পরিষ্কার হয় [...string]
।
.split('')
পরিপূরক বিমানগুলি (ইউটিএফ -16 এ সারোগেট জোড় ) এর অক্ষরগুলির সাথে ইস্যু রয়েছে, কারণ এটি কোড পয়েন্টের পরিবর্তে ইউটিএফ -16 কোড ইউনিট দ্বারা বিভক্ত হয় । স্প্রেড অপারেটর এবং (আমার পছন্দ) না। Array.from()
মনে হচ্ছে পার্টিতে আমি 3 বছর দেরি করেছি ...
দুর্ভাগ্যক্রমে আপনি হিসাবে চিহ্নিত করা যেতে পারে না। দেখুন যারা জাভাস্ক্রিপ্ট স্ট্রিং অপরিবর্তনীয়? আমার কি জাভাস্ক্রিপ্টে "স্ট্রিং বিল্ডার" দরকার?
পরবর্তী সেরা কাজটি আপনি করতে পারেন একটি "ভিউ" বা "র্যাপার" তৈরি করা, যা একটি স্ট্রিং নেয় এবং স্ট্রিং এপিআইয়ের যে কোনও অংশ আপনি ব্যবহার করছেন তা পুনরায় সরবরাহ করে তবে স্ট্রিংয়ের ভান করা উল্টা হয়। উদাহরণ স্বরূপ:
var identity = function(x){return x};
function LazyString(s) {
this.original = s;
this.length = s.length;
this.start = 0; this.stop = this.length; this.dir = 1; // "virtual" slicing
// (dir=-1 if reversed)
this._caseTransform = identity;
}
// syntactic sugar to create new object:
function S(s) {
return new LazyString(s);
}
//We now implement a `"...".reversed` which toggles a flag which will change our math:
(function(){ // begin anonymous scope
var x = LazyString.prototype;
// Addition to the String API
x.reversed = function() {
var s = new LazyString(this.original);
s.start = this.stop - this.dir;
s.stop = this.start - this.dir;
s.dir = -1*this.dir;
s.length = this.length;
s._caseTransform = this._caseTransform;
return s;
}
//We also override string coercion for some extra versatility (not really necessary):
// OVERRIDE STRING COERCION
// - for string concatenation e.g. "abc"+reversed("abc")
x.toString = function() {
if (typeof this._realized == 'undefined') { // cached, to avoid recalculation
this._realized = this.dir==1 ?
this.original.slice(this.start,this.stop) :
this.original.slice(this.stop+1,this.start+1).split("").reverse().join("");
this._realized = this._caseTransform.call(this._realized, this._realized);
}
return this._realized;
}
//Now we reimplement the String API by doing some math:
// String API:
// Do some math to figure out which character we really want
x.charAt = function(i) {
return this.slice(i, i+1).toString();
}
x.charCodeAt = function(i) {
return this.slice(i, i+1).toString().charCodeAt(0);
}
// Slicing functions:
x.slice = function(start,stop) {
// lazy chaining version of https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice
if (stop===undefined)
stop = this.length;
var relativeStart = start<0 ? this.length+start : start;
var relativeStop = stop<0 ? this.length+stop : stop;
if (relativeStart >= this.length)
relativeStart = this.length;
if (relativeStart < 0)
relativeStart = 0;
if (relativeStop > this.length)
relativeStop = this.length;
if (relativeStop < 0)
relativeStop = 0;
if (relativeStop < relativeStart)
relativeStop = relativeStart;
var s = new LazyString(this.original);
s.length = relativeStop - relativeStart;
s.start = this.start + this.dir*relativeStart;
s.stop = s.start + this.dir*s.length;
s.dir = this.dir;
//console.log([this.start,this.stop,this.dir,this.length], [s.start,s.stop,s.dir,s.length])
s._caseTransform = this._caseTransform;
return s;
}
x.substring = function() {
// ...
}
x.substr = function() {
// ...
}
//Miscellaneous functions:
// Iterative search
x.indexOf = function(value) {
for(var i=0; i<this.length; i++)
if (value==this.charAt(i))
return i;
return -1;
}
x.lastIndexOf = function() {
for(var i=this.length-1; i>=0; i--)
if (value==this.charAt(i))
return i;
return -1;
}
// The following functions are too complicated to reimplement easily.
// Instead just realize the slice and do it the usual non-in-place way.
x.match = function() {
var s = this.toString();
return s.apply(s, arguments);
}
x.replace = function() {
var s = this.toString();
return s.apply(s, arguments);
}
x.search = function() {
var s = this.toString();
return s.apply(s, arguments);
}
x.split = function() {
var s = this.toString();
return s.apply(s, arguments);
}
// Case transforms:
x.toLowerCase = function() {
var s = new LazyString(this.original);
s._caseTransform = ''.toLowerCase;
s.start=this.start; s.stop=this.stop; s.dir=this.dir; s.length=this.length;
return s;
}
x.toUpperCase = function() {
var s = new LazyString(this.original);
s._caseTransform = ''.toUpperCase;
s.start=this.start; s.stop=this.stop; s.dir=this.dir; s.length=this.length;
return s;
}
})() // end anonymous scope
ডেমো:
> r = S('abcABC')
LazyString
original: "abcABC"
__proto__: LazyString
> r.charAt(1); // doesn't reverse string!!! (good if very long)
"B"
> r.toLowerCase() // must reverse string, so does so
"cbacba"
> r.toUpperCase() // string already reversed: no extra work
"CBACBA"
> r + '-demo-' + r // natural coercion, string already reversed: no extra work
"CBAcba-demo-CBAcba"
ক্র্যাকার - নিখুঁত গণিত দ্বারা স্থানে সম্পন্ন করা হয়েছে, প্রতিটি চরিত্রটি একবার একবার পরিদর্শন করেছেন, এবং শুধুমাত্র প্রয়োজনে:
> 'demo: ' + S('0123456789abcdef').slice(3).reversed().slice(1,-1).toUpperCase()
"demo: EDCBA987654"
> S('0123456789ABCDEF').slice(3).reversed().slice(1,-1).toLowerCase().charAt(3)
"b"
খুব বড় স্ট্রিংয়ের সাথে প্রয়োগ করা হলে, যদি আপনি কেবল তুলনামূলকভাবে ছোট ছোট টুকরো নিচ্ছেন তবে এটি গুরুত্বপূর্ণ সাফল্য অর্জন করে।
এটি মূল্যবান কিনা (বেশিরভাগ প্রোগ্রামিং ভাষার মতো-অনুলিপি-যেমন-অনুলিপিের চেয়েও বেশি) আপনার ব্যবহারের ক্ষেত্রে এবং আপনি স্ট্রিং এপিআইকে কীভাবে দক্ষতার সাথে পুনরায় প্রতিস্থাপন করেন তার উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনি চান সমস্ত স্ট্রিং ইনডেক্স ম্যানিপুলেশন করতে হয়, বা ছোট slice
গুলি বা substr
গুলি নেয় তবে এটি আপনার স্থান এবং সময় সাশ্রয় করবে। আপনি যদি বড় বিপরীত টুকরা বা সাবস্ট্রিংগুলি মুদ্রণের পরিকল্পনা করছেন তবে সঞ্চয়টি সত্যই ছোট হতে পারে, সম্পূর্ণ অনুলিপি করার চেয়েও খারাপ। আপনার "বিপরীত" স্ট্রিংয়ের ধরণও থাকবে নাstring
, যদিও আপনি প্রোটোটাইপিং দিয়ে এটি জাল করতে সক্ষম হতে পারেন।
উপরের ডেমো প্রয়োগটি রিভার্সডস্ট্রিং টাইপের একটি নতুন অবজেক্ট তৈরি করে। এটি প্রোটোটাইপযুক্ত, এবং তাই প্রায় ন্যূনতম কাজ এবং ন্যূনতম স্পেস ওভারহেড (প্রোটোটাইপ সংজ্ঞাগুলি ভাগ করা হয়) দিয়ে মোটামুটি দক্ষ। এটি পিছনে কাটা জড়িত একটি অলস বাস্তবায়ন। আপনি যখনই .slice
বা এর মতো কোনও কার্য সম্পাদন করেন .reversed
এটি সূচক গণিত সম্পাদন করবে। অবশেষে যখন আপনি ডেটা উত্তোলন করবেন (স্পষ্টভাবে কলিং .toString()
বা .charCodeAt(...)
কোনও কিছু দিয়ে), এটি "স্মার্ট" পদ্ধতিতে প্রয়োগ করা হবে, সম্ভাব্যতম ডেটা স্পর্শ করা।
দ্রষ্টব্য: উপরের স্ট্রিং এপিআই একটি উদাহরণ এবং পুরোপুরি প্রয়োগ করা যেতে পারে না। আপনি প্রয়োজন মাত্র 1-2 ফাংশন ব্যবহার করতে পারেন।
জাভাস্ক্রিপ্টে আপনি স্ট্রিংটি বিপরীত করতে পারেন এমন অনেকগুলি উপায় রয়েছে। আমি তিনটি উপায়ে পছন্দ করছি prefer
পদ্ধতির 1: বিপরীত ফাংশন ব্যবহার করে:
function reverse(str) {
return str.split('').reverse().join('');
}
পদ্ধতির 2: অক্ষরের মাধ্যমে লুপিং:
function reverse(str) {
let reversed = '';
for (let character of str) {
reversed = character + reversed;
}
return reversed;
}
পদ্ধতি 3: হ্রাস ফাংশন ব্যবহার করে:
function reverse(str) {
return str.split('').reduce((rev, char) => char + rev, '');
}
আশা করি এটা কাজে লাগবে :)
একটি সাক্ষাত্কারের সময়, আমাকে কোনও ভেরিয়েবল বা নেটিভ পদ্ধতি ব্যবহার না করে একটি স্ট্রিং উল্টাতে বলা হয়েছিল was এটি আমার প্রিয় বাস্তবায়ন:
function reverseString(str) {
return str === '' ? '' : reverseString(str.slice(1)) + str[0];
}
slice
? : - /
Array.prototype.reverse()
।
এটি করার একাধিক উপায় রয়েছে, আপনি নিম্নলিখিতগুলি পরীক্ষা করতে পারেন,
1. লুপের জন্য প্রচলিত (বাড়ানো):
function reverseString(str){
let stringRev ="";
for(let i= 0; i<str.length; i++){
stringRev = str[i]+stringRev;
}
return stringRev;
}
alert(reverseString("Hello World!"));
লুপের জন্য ditionতিহ্যগত (হ্রাস):
function reverseString(str){
let revstr = "";
for(let i = str.length-1; i>=0; i--){
revstr = revstr+ str[i];
}
return revstr;
}
alert(reverseString("Hello World!"));
৩. অফ-লুপ ব্যবহার করা
function reverseString(str){
let strn ="";
for(let char of str){
strn = char + strn;
}
return strn;
}
alert(reverseString("Get well soon"));
4. forEach / হাই অর্ডার অ্যারে পদ্ধতি ব্যবহার করে:
function reverseString(str){
let revSrring = "";
str.split("").forEach(function(char){
revSrring = char + revSrring;
});
return revSrring;
}
alert(reverseString("Learning JavaScript"));
5. ES6 মান:
function reverseString(str){
let revSrring = "";
str.split("").forEach(char => revSrring = char + revSrring);
return revSrring;
}
alert(reverseString("Learning JavaScript"));
The. সর্বশেষতম উপায়:
function reverseString(str){
return str.split("").reduce(function(revString, char){
return char + revString;
}, "");
}
alert(reverseString("Learning JavaScript"));
You. আপনি নিম্নলিখিতটি ব্যবহার করে ফলাফলও পেতে পারেন,
function reverseString(str){
return str.split("").reduce((revString, char)=> char + revString, "");
}
alert(reverseString("Learning JavaScript"));
ES6 এ আপনার কাছে আরও একটি বিকল্প রয়েছে
function reverseString (str) {
return [...str].reverse().join('')
}
reverseString('Hello');
এটি আমার মনে হয় সবচেয়ে সহজ উপায়
var reverse = function(str) {
var arr = [];
for (var i = 0, len = str.length; i <= len; i++) {
arr.push(str.charAt(len - i))
}
return arr.join('');
}
console.log(reverse('I want a 🍺'));
Array.prototype.reverse()
সেটিকে সবচেয়ে সহজ উপায় হিসাবে ব্যবহার করে, তাই সবচেয়ে জনপ্রিয় উত্তর। অবশ্যই এটির জন্য জাভাস্ক্রিপ্টের ভাল পূর্বের জ্ঞান প্রয়োজন।
আমি জানি যে এটি একটি পুরানো প্রশ্ন যা এর উত্তরের জবাব দেওয়া হয়েছে, তবে নিজের মনোরঞ্জনের জন্য আমি নিম্নলিখিত বিপরীত ফাংশনটি লিখেছিলাম এবং ভেবেছিলাম এটি অন্য কারও পক্ষে কার্যকর হলে আমি এটি ভাগ করে নেব। এটি সারোগেট জোড়া এবং সমন্বয় চিহ্ন উভয়ই পরিচালনা করে:
function StringReverse (str)
{
var charArray = [];
for (var i = 0; i < str.length; i++)
{
if (i+1 < str.length)
{
var value = str.charCodeAt(i);
var nextValue = str.charCodeAt(i+1);
if ( ( value >= 0xD800 && value <= 0xDBFF
&& (nextValue & 0xFC00) == 0xDC00) // Surrogate pair)
|| (nextValue >= 0x0300 && nextValue <= 0x036F)) // Combining marks
{
charArray.unshift(str.substring(i, i+2));
i++; // Skip the other half
continue;
}
}
// Otherwise we just have a rogue surrogate marker or a plain old character.
charArray.unshift(str[i]);
}
return charArray.join('');
}
ম্যাথিয়াস, পুনাইকোড এবং জাভাস্ক্রিপ্টে চরিত্রের এনকোডিংয়ের জটিলতা সম্পর্কে আমাকে স্কুল করার জন্য অন্যান্য প্রসঙ্গগুলি।
আপনি পারবেন না কারণ জেএস স্ট্রিংগুলি পরিবর্তনযোগ্য। সংক্ষিপ্ত স্থানে অ-সমাধান
[...str].reverse().join``
আপনি যদি কোনও বিল্ট ইন ফাংশন ব্যবহার করতে না চান। এটা চেষ্টা কর
var string = 'abcdefg';
var newstring = '';
for(let i = 0; i < string.length; i++){
newstring = string[i] += newstring;
}
console.log(newstring);
আসল উত্তরটি: আপনি এটি জায়গায় বিপরীত করতে পারবেন না, তবে আপনি একটি নতুন স্ট্রিং তৈরি করতে পারেন যা বিপরীত।
যেমন পুনরাবৃত্তি নিয়ে খেলতে অনুশীলন করা: কখনও কখনও আপনি যখন কোনও সাক্ষাত্কারে যান, তখন সাক্ষাত্কার আপনাকে জিজ্ঞাসা করতে পারে কীভাবে পুনরাবৃত্তি ব্যবহার করে এটি করা যায় এবং আমি মনে করি "পছন্দসই উত্তর" হতে পারে "আমি বরং এটি পুনরাবৃত্তি হিসাবে এটি করব না সহজেই স্ট্যাকের ওভারফ্লো হতে পারে "(কারণ এটি O(n)
বরং এটি is O(log n)
যদি এটি হয় O(log n)
তবে স্ট্যাকের ওভারফ্লো পাওয়া বেশ কঠিন - 4 বিলিয়ন আইটেম 32 এর স্ট্যাক স্তর দ্বারা পরিচালনা করা যেতে পারে, যেমন 2 ** 32 4294967296। তবে যদি হয়O(n)
তবে এটি সহজেই একটি স্ট্যাকের ওভারফ্লো পেতে পারে।
কখনও কখনও সাক্ষাত্কারকারী আপনাকে জিজ্ঞাসা করবে, "ঠিক যেমন একটি অনুশীলন হিসাবে, আপনি এখনও এটি পুনরাবৃত্তি ব্যবহার করে লিখেন না?" এবং এটি এখানে:
String.prototype.reverse = function() {
if (this.length <= 1) return this;
else return this.slice(1).reverse() + this.slice(0,1);
}
পরীক্ষা রান:
var s = "";
for(var i = 0; i < 1000; i++) {
s += ("apple" + i);
}
console.log(s.reverse());
আউটপুট:
999elppa899elppa...2elppa1elppa0elppa
একটি স্ট্যাক ওভারফ্লো পেয়ে চেষ্টা করতে, আমি পরিবর্তন 1000
করতে 10000
Google Chrome- এ, এবং এটি প্রতিবেদন করার সময়:
RangeError: Maximum call stack size exceeded
//es6
//array.from
const reverseString = (string) => Array.from(string).reduce((a, e) => e + a);
//split
const reverseString = (string) => string.split('').reduce((a, e) => e + a);
//split problem
"𠜎𠺢".split('')[0] === Array.from("𠜎𠺢")[0] // "�" === "𠜎" => false
"😂😹🤗".split('')[0] === Array.from("😂😹🤗")[0] // "�" === "😂" => false
একটি ছোট ফাংশন যা ডায়াক্রিটিক্স এবং 2-বাইট অক্ষর উভয়কেই সমন্বিত করে:
(function(){
var isCombiningDiacritic = function( code )
{
return (0x0300 <= code && code <= 0x036F) // Comb. Diacritical Marks
|| (0x1AB0 <= code && code <= 0x1AFF) // Comb. Diacritical Marks Extended
|| (0x1DC0 <= code && code <= 0x1DFF) // Comb. Diacritical Marks Supplement
|| (0x20D0 <= code && code <= 0x20FF) // Comb. Diacritical Marks for Symbols
|| (0xFE20 <= code && code <= 0xFE2F); // Comb. Half Marks
};
String.prototype.reverse = function()
{
var output = "",
i = this.length - 1,
width;
for ( ; i >= 0; --i )
{
width = 1;
while( i > 0 && isCombiningDiacritic( this.charCodeAt(i) ) )
{
--i;
width++;
}
if (
i > 0
&& "\uDC00" <= this[i] && this[i] <= "\uDFFF"
&& "\uD800" <= this[i-1] && this[i-1] <= "\uDBFF"
)
{
--i;
width++;
}
output += this.substr( i, width );
}
return output;
}
})();
// Tests
[
'abcdefg',
'ab\u0303c',
'a\uD83C\uDFA5b',
'a\uD83C\uDFA5b\uD83C\uDFA6c',
'a\uD83C\uDFA5b\u0306c\uD83C\uDFA6d',
'TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡' // copied from http://stackoverflow.com/a/1732454/1509264
].forEach(
function(str){ console.log( str + " -> " + str.reverse() ); }
);
হালনাগাদ
ডায়াক্রিটিক্সের সম্মিলনের আরও একটি সম্পূর্ণ তালিকা:
var isCombiningDiacritic = function( code )
{
return (0x0300 <= code && code <= 0x036F)
|| (0x0483 <= code && code <= 0x0489)
|| (0x0591 <= code && code <= 0x05BD)
|| (code == 0x05BF)
|| (0x05C1 <= code && code <= 0x05C2)
|| (0x05C4 <= code && code <= 0x05C5)
|| (code == 0x05C7)
|| (0x0610 <= code && code <= 0x061A)
|| (0x064B <= code && code <= 0x065F)
|| (code == 0x0670)
|| (0x06D6 <= code && code <= 0x06DC)
|| (0x06DF <= code && code <= 0x06E4)
|| (0x06E7 <= code && code <= 0x06E8)
|| (0x06EA <= code && code <= 0x06ED)
|| (code == 0x0711)
|| (0x0730 <= code && code <= 0x074A)
|| (0x07A6 <= code && code <= 0x07B0)
|| (0x07EB <= code && code <= 0x07F3)
|| (code == 0x07FD)
|| (0x0816 <= code && code <= 0x0819)
|| (0x081B <= code && code <= 0x0823)
|| (0x0825 <= code && code <= 0x0827)
|| (0x0829 <= code && code <= 0x082D)
|| (0x0859 <= code && code <= 0x085B)
|| (0x08D3 <= code && code <= 0x08E1)
|| (0x08E3 <= code && code <= 0x0902)
|| (code == 0x093A)
|| (code == 0x093C)
|| (0x0941 <= code && code <= 0x0948)
|| (code == 0x094D)
|| (0x0951 <= code && code <= 0x0957)
|| (0x0962 <= code && code <= 0x0963)
|| (code == 0x0981)
|| (code == 0x09BC)
|| (0x09C1 <= code && code <= 0x09C4)
|| (code == 0x09CD)
|| (0x09E2 <= code && code <= 0x09E3)
|| (0x09FE <= code && code <= 0x0A02)
|| (code == 0x0A3C)
|| (0x0A41 <= code && code <= 0x0A51)
|| (0x0A70 <= code && code <= 0x0A71)
|| (code == 0x0A75)
|| (0x0A81 <= code && code <= 0x0A82)
|| (code == 0x0ABC)
|| (0x0AC1 <= code && code <= 0x0AC8)
|| (code == 0x0ACD)
|| (0x0AE2 <= code && code <= 0x0AE3)
|| (0x0AFA <= code && code <= 0x0B01)
|| (code == 0x0B3C)
|| (code == 0x0B3F)
|| (0x0B41 <= code && code <= 0x0B44)
|| (0x0B4D <= code && code <= 0x0B56)
|| (0x0B62 <= code && code <= 0x0B63)
|| (code == 0x0B82)
|| (code == 0x0BC0)
|| (code == 0x0BCD)
|| (code == 0x0C00)
|| (code == 0x0C04)
|| (0x0C3E <= code && code <= 0x0C40)
|| (0x0C46 <= code && code <= 0x0C56)
|| (0x0C62 <= code && code <= 0x0C63)
|| (code == 0x0C81)
|| (code == 0x0CBC)
|| (0x0CCC <= code && code <= 0x0CCD)
|| (0x0CE2 <= code && code <= 0x0CE3)
|| (0x0D00 <= code && code <= 0x0D01)
|| (0x0D3B <= code && code <= 0x0D3C)
|| (0x0D41 <= code && code <= 0x0D44)
|| (code == 0x0D4D)
|| (0x0D62 <= code && code <= 0x0D63)
|| (code == 0x0DCA)
|| (0x0DD2 <= code && code <= 0x0DD6)
|| (code == 0x0E31)
|| (0x0E34 <= code && code <= 0x0E3A)
|| (0x0E47 <= code && code <= 0x0E4E)
|| (code == 0x0EB1)
|| (0x0EB4 <= code && code <= 0x0EBC)
|| (0x0EC8 <= code && code <= 0x0ECD)
|| (0x0F18 <= code && code <= 0x0F19)
|| (code == 0x0F35)
|| (code == 0x0F37)
|| (code == 0x0F39)
|| (0x0F71 <= code && code <= 0x0F7E)
|| (0x0F80 <= code && code <= 0x0F84)
|| (0x0F86 <= code && code <= 0x0F87)
|| (0x0F8D <= code && code <= 0x0FBC)
|| (code == 0x0FC6)
|| (0x102D <= code && code <= 0x1030)
|| (0x1032 <= code && code <= 0x1037)
|| (0x1039 <= code && code <= 0x103A)
|| (0x103D <= code && code <= 0x103E)
|| (0x1058 <= code && code <= 0x1059)
|| (0x105E <= code && code <= 0x1060)
|| (0x1071 <= code && code <= 0x1074)
|| (code == 0x1082)
|| (0x1085 <= code && code <= 0x1086)
|| (code == 0x108D)
|| (code == 0x109D)
|| (0x135D <= code && code <= 0x135F)
|| (0x1712 <= code && code <= 0x1714)
|| (0x1732 <= code && code <= 0x1734)
|| (0x1752 <= code && code <= 0x1753)
|| (0x1772 <= code && code <= 0x1773)
|| (0x17B4 <= code && code <= 0x17B5)
|| (0x17B7 <= code && code <= 0x17BD)
|| (code == 0x17C6)
|| (0x17C9 <= code && code <= 0x17D3)
|| (code == 0x17DD)
|| (0x180B <= code && code <= 0x180D)
|| (0x1885 <= code && code <= 0x1886)
|| (code == 0x18A9)
|| (0x1920 <= code && code <= 0x1922)
|| (0x1927 <= code && code <= 0x1928)
|| (code == 0x1932)
|| (0x1939 <= code && code <= 0x193B)
|| (0x1A17 <= code && code <= 0x1A18)
|| (code == 0x1A1B)
|| (code == 0x1A56)
|| (0x1A58 <= code && code <= 0x1A60)
|| (code == 0x1A62)
|| (0x1A65 <= code && code <= 0x1A6C)
|| (0x1A73 <= code && code <= 0x1A7F)
|| (0x1AB0 <= code && code <= 0x1B03)
|| (code == 0x1B34)
|| (0x1B36 <= code && code <= 0x1B3A)
|| (code == 0x1B3C)
|| (code == 0x1B42)
|| (0x1B6B <= code && code <= 0x1B73)
|| (0x1B80 <= code && code <= 0x1B81)
|| (0x1BA2 <= code && code <= 0x1BA5)
|| (0x1BA8 <= code && code <= 0x1BA9)
|| (0x1BAB <= code && code <= 0x1BAD)
|| (code == 0x1BE6)
|| (0x1BE8 <= code && code <= 0x1BE9)
|| (code == 0x1BED)
|| (0x1BEF <= code && code <= 0x1BF1)
|| (0x1C2C <= code && code <= 0x1C33)
|| (0x1C36 <= code && code <= 0x1C37)
|| (0x1CD0 <= code && code <= 0x1CD2)
|| (0x1CD4 <= code && code <= 0x1CE0)
|| (0x1CE2 <= code && code <= 0x1CE8)
|| (code == 0x1CED)
|| (code == 0x1CF4)
|| (0x1CF8 <= code && code <= 0x1CF9)
|| (0x1DC0 <= code && code <= 0x1DFF)
|| (0x20D0 <= code && code <= 0x20F0)
|| (0x2CEF <= code && code <= 0x2CF1)
|| (code == 0x2D7F)
|| (0x2DE0 <= code && code <= 0x2DFF)
|| (0x302A <= code && code <= 0x302D)
|| (0x3099 <= code && code <= 0x309A)
|| (0xA66F <= code && code <= 0xA672)
|| (0xA674 <= code && code <= 0xA67D)
|| (0xA69E <= code && code <= 0xA69F)
|| (0xA6F0 <= code && code <= 0xA6F1)
|| (code == 0xA802)
|| (code == 0xA806)
|| (code == 0xA80B)
|| (0xA825 <= code && code <= 0xA826)
|| (0xA8C4 <= code && code <= 0xA8C5)
|| (0xA8E0 <= code && code <= 0xA8F1)
|| (code == 0xA8FF)
|| (0xA926 <= code && code <= 0xA92D)
|| (0xA947 <= code && code <= 0xA951)
|| (0xA980 <= code && code <= 0xA982)
|| (code == 0xA9B3)
|| (0xA9B6 <= code && code <= 0xA9B9)
|| (0xA9BC <= code && code <= 0xA9BD)
|| (code == 0xA9E5)
|| (0xAA29 <= code && code <= 0xAA2E)
|| (0xAA31 <= code && code <= 0xAA32)
|| (0xAA35 <= code && code <= 0xAA36)
|| (code == 0xAA43)
|| (code == 0xAA4C)
|| (code == 0xAA7C)
|| (code == 0xAAB0)
|| (0xAAB2 <= code && code <= 0xAAB4)
|| (0xAAB7 <= code && code <= 0xAAB8)
|| (0xAABE <= code && code <= 0xAABF)
|| (code == 0xAAC1)
|| (0xAAEC <= code && code <= 0xAAED)
|| (code == 0xAAF6)
|| (code == 0xABE5)
|| (code == 0xABE8)
|| (code == 0xABED)
|| (code == 0xFB1E)
|| (0xFE00 <= code && code <= 0xFE0F)
|| (0xFE20 <= code && code <= 0xFE2F)
|| (code == 0x101FD)
|| (code == 0x102E0)
|| (0x10376 <= code && code <= 0x1037A)
|| (0x10A01 <= code && code <= 0x10A0F)
|| (0x10A38 <= code && code <= 0x10A3F)
|| (0x10AE5 <= code && code <= 0x10AE6)
|| (0x10D24 <= code && code <= 0x10D27)
|| (0x10F46 <= code && code <= 0x10F50)
|| (code == 0x11001)
|| (0x11038 <= code && code <= 0x11046)
|| (0x1107F <= code && code <= 0x11081)
|| (0x110B3 <= code && code <= 0x110B6)
|| (0x110B9 <= code && code <= 0x110BA)
|| (0x11100 <= code && code <= 0x11102)
|| (0x11127 <= code && code <= 0x1112B)
|| (0x1112D <= code && code <= 0x11134)
|| (code == 0x11173)
|| (0x11180 <= code && code <= 0x11181)
|| (0x111B6 <= code && code <= 0x111BE)
|| (0x111C9 <= code && code <= 0x111CC)
|| (0x1122F <= code && code <= 0x11231)
|| (code == 0x11234)
|| (0x11236 <= code && code <= 0x11237)
|| (code == 0x1123E)
|| (code == 0x112DF)
|| (0x112E3 <= code && code <= 0x112EA)
|| (0x11300 <= code && code <= 0x11301)
|| (0x1133B <= code && code <= 0x1133C)
|| (code == 0x11340)
|| (0x11366 <= code && code <= 0x11374)
|| (0x11438 <= code && code <= 0x1143F)
|| (0x11442 <= code && code <= 0x11444)
|| (code == 0x11446)
|| (code == 0x1145E)
|| (0x114B3 <= code && code <= 0x114B8)
|| (code == 0x114BA)
|| (0x114BF <= code && code <= 0x114C0)
|| (0x114C2 <= code && code <= 0x114C3)
|| (0x115B2 <= code && code <= 0x115B5)
|| (0x115BC <= code && code <= 0x115BD)
|| (0x115BF <= code && code <= 0x115C0)
|| (0x115DC <= code && code <= 0x115DD)
|| (0x11633 <= code && code <= 0x1163A)
|| (code == 0x1163D)
|| (0x1163F <= code && code <= 0x11640)
|| (code == 0x116AB)
|| (code == 0x116AD)
|| (0x116B0 <= code && code <= 0x116B5)
|| (code == 0x116B7)
|| (0x1171D <= code && code <= 0x1171F)
|| (0x11722 <= code && code <= 0x11725)
|| (0x11727 <= code && code <= 0x1172B)
|| (0x1182F <= code && code <= 0x11837)
|| (0x11839 <= code && code <= 0x1183A)
|| (0x119D4 <= code && code <= 0x119DB)
|| (code == 0x119E0)
|| (0x11A01 <= code && code <= 0x11A06)
|| (0x11A09 <= code && code <= 0x11A0A)
|| (0x11A33 <= code && code <= 0x11A38)
|| (0x11A3B <= code && code <= 0x11A3E)
|| (code == 0x11A47)
|| (0x11A51 <= code && code <= 0x11A56)
|| (0x11A59 <= code && code <= 0x11A5B)
|| (0x11A8A <= code && code <= 0x11A96)
|| (0x11A98 <= code && code <= 0x11A99)
|| (0x11C30 <= code && code <= 0x11C3D)
|| (0x11C92 <= code && code <= 0x11CA7)
|| (0x11CAA <= code && code <= 0x11CB0)
|| (0x11CB2 <= code && code <= 0x11CB3)
|| (0x11CB5 <= code && code <= 0x11CB6)
|| (0x11D31 <= code && code <= 0x11D45)
|| (code == 0x11D47)
|| (0x11D90 <= code && code <= 0x11D91)
|| (code == 0x11D95)
|| (code == 0x11D97)
|| (0x11EF3 <= code && code <= 0x11EF4)
|| (0x16AF0 <= code && code <= 0x16AF4)
|| (0x16B30 <= code && code <= 0x16B36)
|| (code == 0x16F4F)
|| (0x16F8F <= code && code <= 0x16F92)
|| (0x1BC9D <= code && code <= 0x1BC9E)
|| (0x1D167 <= code && code <= 0x1D169)
|| (0x1D17B <= code && code <= 0x1D182)
|| (0x1D185 <= code && code <= 0x1D18B)
|| (0x1D1AA <= code && code <= 0x1D1AD)
|| (0x1D242 <= code && code <= 0x1D244)
|| (0x1DA00 <= code && code <= 0x1DA36)
|| (0x1DA3B <= code && code <= 0x1DA6C)
|| (code == 0x1DA75)
|| (code == 0x1DA84)
|| (0x1DA9B <= code && code <= 0x1E02A)
|| (0x1E130 <= code && code <= 0x1E136)
|| (0x1E2EC <= code && code <= 0x1E2EF)
|| (0x1E8D0 <= code && code <= 0x1E8D6)
|| (0x1E944 <= code && code <= 0x1E94A)
|| (0xE0100 <= code && code <= 0xE01EF);
};
isCombiningDiacritic
সমস্ত 316 টি রেঞ্জ অন্তর্ভুক্ত করার জন্য ফাংশনটি সম্পাদনা করা ; আপনার কাছে ডেটা হস্তান্তরিত হওয়ার পরে উপস্থিত হওয়ায় এই সম্পাদনাটি নির্দ্বিধায় জানুন।
function reverseString(string) {
var reversedString = "";
var stringLength = string.length - 1;
for (var i = stringLength; i >= 0; i--) {
reversedString += string[i];
}
return reversedString;
}
স্ট্রিংকে অ্যারেতে রূপান্তর না করে;
String.prototype.reverse = function() {
var ret = "";
var size = 0;
for (var i = this.length - 1; -1 < i; i -= size) {
if (
'\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' &&
'\uDC00' <= this[i] && this[i] <= '\uDFFF'
) {
size = 2;
ret += this[i - 1] + this[i];
} else {
size = 1;
ret += this[i];
}
}
return ret;
}
console.log('anãnam anañam' === 'mañana mañana'.reverse());
অক্ষরগুলি কোড পয়েন্টে রূপান্তর না করেই অ্যারে.রেভার ব্যবহার করে;
String.prototype.reverse = function() {
var array = this.split("").reverse();
for (var i = 0; i < this.length; ++i) {
if (
'\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' &&
'\uDC00' <= this[i] && this[i] <= '\uDFFF'
) {
array[i - 1] = array[i - 1] + array[i];
array[i] = array[i - 1].substr(0, 1);
array[i - 1] = array[i - 1].substr(1, 1);
}
}
return array.join("");
}
console.log('anãnam anañam' === 'mañana mañana'.reverse());
var c = array[i-1]; array[i-1] = array[i]; array[i] = c;
কোড জোড় সংলগ্নকরণের প্রয়োজন হয় না। এছাড়াও, লুপটি 1 থেকে শুরু হওয়া উচিত
'\ud83c\ud83c\udfa5'.reverse()
- এটি ইনপুট হিসাবে একই আউটপুট হবে। বিবৃতি ++i;
মধ্যে যোগ করা এটি if
ঠিক করা উচিত।
'a\u0303bc'.reverse() === 'cba\u0303'
সত্য হওয়া উচিত।
আমি মনে করি স্ট্রিং.প্রোটোটাইপ.রেভারস এই সমস্যাটি সমাধানের একটি ভাল উপায়; নীচের মত কোড;
String.prototype.reverse = function() {
return this.split('').reverse().join('');
}
var str = 'this is a good example for string reverse';
str.reverse();
-> "esrever gnirts rof elpmaxe doog a si siht";
var str = "my name is saurabh ";
var empStr='',finalString='';
var chunk=[];
function reverse(str){
var i,j=0,n=str.length;
for(i=0;i<n;++i){
if(str[i]===' '){
chunk[j]=empStr;
empStr = '';
j++;
}else{
empStr=empStr+str[i];
}
}
for(var z=chunk.length-1;z>=0;z--){
finalString = finalString +' '+ chunk[z];
console.log(finalString);
}
return true;
}
reverse(str);
আমার নিজস্ব চেষ্টা ...
var str = "The Car";
function reverseStr(str) {
var reversed = "";
var len = str.length;
for (var i = 1; i < (len + 1); i++) {
reversed += str[len - i];
}
return reversed;
}
var strReverse = reverseStr(str);
console.log(strReverse);
// "raC ehT"
এটি শুকনো এবং সহজ বোকা রাখুন !!
function reverse(s){
let str = s;
var reverse = '';
for (var i=str.length;i>0;i--){
var newstr = str.substring(0,i)
reverse += newstr.substr(-1,1)
}
return reverse;
}
ঠিক আছে, বেশ সহজ, আপনার জন্য স্ট্রিংটি বিপরীতে করার জন্য আপনি একটি সাধারণ লুপ দিয়ে একটি ফাংশন তৈরি করতে পারেন reverse()
, charAt()
ইত্যাদি ইত্যাদি:
উদাহরণস্বরূপ আপনার কাছে এই স্ট্রিং রয়েছে:
var name = "StackOverflow";
এভাবে একটি ফাংশন তৈরি করুন, আমি এটি কল reverseString
...
function reverseString(str) {
if(!str.trim() || 'string' !== typeof str) {
return;
}
let l=str.length, s='';
while(l > 0) {
l--;
s+= str[l];
}
return s;
}
এবং আপনি এটি কল করতে পারেন:
reverseString(name);
এবং ফলাফলটি হবে:
"wolfrevOkcatS"
জাভাস্ক্রিপ্টে একটি স্ট্রিং বিপরীত করার সেরা উপায়
1) অ্যারে। রিভার্স:
আপনি সম্ভবত ভাবছেন, অপেক্ষা করুন আমি ভেবেছিলাম আমরা একটি স্ট্রিং বিপরীত করছি, আপনি কেন অ্যারে.রেভার পদ্ধতিটি ব্যবহার করছেন। স্ট্রিং.স্প্লিট পদ্ধতিটি ব্যবহার করে আমরা আমাদের স্ট্রিংকে অক্ষরের অ্যারে রূপান্তর করছি। তারপরে আমরা অ্যারেতে প্রতিটি মানের ক্রমকে বিপরীত করছি এবং তারপরে অবশেষে অ্যারে.জেইন পদ্ধতিটি ব্যবহার করে অ্যারেটিকে আবার একটি স্ট্রিংয়ে রূপান্তর করি।
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString('dwayne');
2) যখন লুপ হ্রাস:
যদিও চমত্কার ভার্বোজ, এই সমাধানটির একাধিক সমাধানের তুলনায় এর সুবিধা রয়েছে। আপনি কোনও অ্যারে তৈরি করছেন না এবং আপনি উত্সের স্ট্রিংয়ের অক্ষরগুলির উপর ভিত্তি করে একটি স্ট্রিং সংশ্লেষ করছেন।
পারফরম্যান্সের দৃষ্টিকোণ থেকে, এটি সম্ভবত সেরা ফলাফল দেয় (যদিও অনির্ধারিত)। অত্যন্ত দীর্ঘ স্ট্রিংয়ের জন্য, পারফরম্যান্সের লাভগুলি উইন্ডোটি ছাড়িয়ে যেতে পারে।
function reverseString(str) {
var temp = '';
var i = str.length;
while (i > 0) {
temp += str.substring(i - 1, i);
i--;
}
return temp;
}
reverseString('dwayne');
3) পুনরাবৃত্তি
এই সমাধানটি কতটা সহজ এবং পরিষ্কার তা আমি পছন্দ করি। আপনি পরিষ্কারভাবে দেখতে পাচ্ছেন যে স্ট্রিং.চার্ট এবং স্ট্রিং.সুবস্ট্র পদ্ধতিগুলি স্ট্রিং ফাঁকা না হওয়া পর্যন্ত প্রতিবার নিজেকে কল করে একটি আলাদা মান দিয়ে যাওয়ার জন্য ব্যবহৃত হচ্ছে যার মধ্যে টের্নারি নিজেকে কল করতে পুনরাবৃত্তি ব্যবহার না করে কেবল একটি খালি স্ট্রিং ফিরিয়ে দেয় । এটি সম্ভবত দ্বিতীয় সমাধানের পরে দ্বিতীয় সেরা পারফরম্যান্স অর্জন করবে।
function reverseString(str) {
return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}
reverseString('dwayne');