অনেকগুলি বিভ্রান্তি রয়েছে বলে মনে হচ্ছে যা কেবল এলকার এবং রায়না 77 মন্তব্য দ্বারা সম্বোধন করেছে, সুতরাং আমাকে একটি স্পষ্ট করার উত্তর পোস্ট করুন।
স্পষ্টতা
" string.splice" থেকে কেউ আশা করতে পারে যে এটির মতো এটির মতো:
- 3 টি পর্যন্ত আর্গুমেন্ট গ্রহণ করে: অবস্থান শুরু করুন, দৈর্ঘ্য এবং (allyচ্ছিকভাবে) সন্নিবেশ (স্ট্রিং)
- কাট আউট অংশ প্রদান
- মূল স্ট্রিংটি পরিবর্তন করে
সমস্যাটি হ'ল 3 ডি প্রয়োজনীয়তা পূরণ করা যায় না কারণ স্ট্রিংগুলি পরিবর্তনযোগ্য (সম্পর্কিত: 1 , 2 ), আমি এখানে সবচেয়ে উত্সর্গীকৃত মন্তব্য পেয়েছি :
জাভাস্ক্রিপ্টে স্ট্রিং আদিম মান ধরনের হয় এবং না বস্তু ( বৈশিষ্ট )। বস্তুত, ES5 থেকে এদের মাত্র 5 মান ধরনের এক পাশাপাশি করছি null, undefined, numberএবং boolean। Strings দ্বারা নির্ধারিত হয় মান এবং না রেফারেন্স দ্বারা এবং যেমন পাঠানো হয়। সুতরাং, স্ট্রিংগুলি কেবল অপরিবর্তনীয় নয়, তারা একটি মান । স্ট্রিং পরিবর্তন "hello"হতে "world"সিদ্ধান্ত এখন থেকে যে 3 নম্বর মত হলে সংখ্যা 4 ... এটা কোন অর্থে তোলে।
সুতরাং, এই অ্যাকাউন্টে, কেউ string.spliceকেবল " " জিনিসটি আশা করতে পারে :
- 2 টি পর্যন্ত আর্গুমেন্ট গ্রহণ করে: অবস্থান শুরু করুন, দৈর্ঘ্য (স্ট্রিংটি পরিবর্তন না হওয়ার কারণে সন্নিবেশ কোনও অর্থ দেয় না)
- কাট আউট অংশ প্রদান
যা কি substrকরে; বা, বিকল্পভাবে,
- 3 টি পর্যন্ত আর্গুমেন্ট গ্রহণ করে: অবস্থান শুরু করুন, দৈর্ঘ্য এবং (allyচ্ছিকভাবে) সন্নিবেশ (স্ট্রিং)
- পরিবর্তিত স্ট্রিং প্রদান করে (কাটা অংশ ছাড়াই এবং সন্নিবেশ সহ)
যা পরবর্তী বিভাগের বিষয়।
সমাধান
আপনি যদি অনুকূলিতকরণের বিষয়ে চিন্তা করেন তবে আপনার সম্ভবত মাইকের বাস্তবায়নটি ব্যবহার করা উচিত:
String.prototype.splice = function(index, count, add) {
if (index < 0) {
index += this.length;
if (index < 0)
index = 0;
}
return this.slice(0, index) + (add || "") + this.slice(index + count);
}
সীমানা ছাড়াই সূচকটির চিকিত্সা আলাদা হতে পারে, যদিও। আপনার প্রয়োজনের উপর নির্ভর করে আপনি এটি করতে পারেন:
if (index < 0) {
index += this.length;
if (index < 0)
index = 0;
}
if (index >= this.length) {
index -= this.length;
if (index >= this.length)
index = this.length - 1;
}
অথবা এমনকি
index = index % this.length;
if (index < 0)
index = this.length + index;
আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা না করেন, তবে আপনি কুমারের পরামর্শটি গ্রহণ করতে চাইতে পারেন যা আরও সোজা-এগিয়ে রয়েছে:
String.prototype.splice = function(index, count, add) {
var chars = this.split('');
chars.splice(index, count, add);
return chars.join('');
}
কর্মক্ষমতা
পারফরম্যান্সের পার্থক্যটি স্ট্রিংয়ের দৈর্ঘ্যের সাথে মারাত্মকভাবে বৃদ্ধি পায়। jsperf দেখায় যে, 10 টির দৈর্ঘ্যের স্ট্রিংগুলির জন্য দ্বিতীয় দ্রবণটির (বিভাজন এবং যোগ দেওয়া) আগের সমাধানের চেয়ে দ্বিগুণ ধীর হয় (স্লাইস ব্যবহার করে), 100-অক্ষরের স্ট্রিংয়ের জন্য এটি x5 এবং 1000-অক্ষরের স্ট্রিংগুলির জন্য এটি অপ্সে / সেকেন্ড এটি:
10 letters 100 letters 1000 letters
slice implementation 1.25 M 2.00 M 1.91 M
split implementation 0.63 M 0.22 M 0.04 M
নোট করুন যে আমি 10 টি বর্ণ থেকে 100 বর্ণগুলিতে স্থানান্তরিত করার সময় 1 ম এবং 2 ডি আর্গুমেন্টগুলি পরিবর্তন করেছি (এখনও আমি অবাক হয়েছি যে 100 টি বর্ণের জন্য পরীক্ষাটি 10 টি বর্ণের চেয়ে দ্রুত চলে)।
str.splitআপনি যে ফাংশনটি সন্ধান করছেন তা হতে পারে: google.com/#q=javascript+string+split