অন্য স্ট্রিংয়ের এক্স পজিশনে স্ট্রিং .োকানো হচ্ছে


237

আমার দুটি ভেরিয়েবল রয়েছে এবং এর দ্বারা উপস্থাপিত পয়েন্টে bস্ট্রিংয়ের স্ট্রিং inোকানো দরকার । আমি যে ফলাফলটি খুঁজছি তা হ'ল "আমি একটি আপেল চাই"। আমি কীভাবে জাভাস্ক্রিপ্ট দিয়ে এটি করতে পারি?aposition

var a = 'I want apple';
var b = ' an';
var position = 6;

উত্তর:


376

var a = "I want apple";
var b = " an";
var position = 6;
var output = [a.slice(0, position), b, a.slice(position)].join('');
console.log(output);


Alচ্ছিক: স্ট্রিংয়ের প্রোটোটাইপ পদ্ধতি হিসাবে

নিম্নলিখিতটি textঅন্য একটি স্ট্রিংয়ের মধ্যে একটি পছন্দসই index, string চ্ছিক removeCountপ্যারামিটার সহ বিচ্ছিন্ন করতে ব্যবহৃত হতে পারে ।

if (String.prototype.splice === undefined) {
  /**
   * Splices text within a string.
   * @param {int} offset The position to insert the text at (before)
   * @param {string} text The text to insert
   * @param {int} [removeCount=0] An optional number of characters to overwrite
   * @returns {string} A modified string containing the spliced text.
   */
  String.prototype.splice = function(offset, text, removeCount=0) {
    let calculatedOffset = offset < 0 ? this.length + offset : offset;
    return this.substring(0, calculatedOffset) +
      text + this.substring(calculatedOffset + removeCount);
  };
}

let originalText = "I want apple";

// Positive offset
console.log(originalText.splice(6, " an"));
// Negative index
console.log(originalText.splice(-5, "an "));
// Chaining
console.log(originalText.splice(6, " an").splice(2, "need", 4).splice(0, "You", 1));
.as-console-wrapper { top: 0; max-height: 100% !important; }


3
দীর্ঘ স্ট্রিংয়ের জন্য, নিকফের সমাধানের চেয়ে এই দ্রবণটি দ্রুত (কারণ এটি কম অনুলিপি করে) is
pts

35
এই সমাধানটি দ্রুত নয়। আমি এই সম্পর্কে কৌতূহল ছিল এবং একটি jsperf চালানো। ভবিষ্যতে যারা এটি পড়েন তাদের কাছে এটি একটি নোট। jsperf.com/javascript-string-splice । সর্বশেষতম এফএফ / ক্রোম / আইই 10 / আই 9 তে পরীক্ষিত। আমি স্বচ্ছতা এবং পারফরম্যান্স উভয়ের জন্য এইটির উপরে ঝুঁকির নিকফের পদ্ধতির ব্যবহার করব।
জাঙ্কিসস্পেস

3
ভাল, খুব সম্ভব। এখানে উত্তরটি প্রায় 3 বছর পুরানো, বেশিরভাগ ব্রাউজার এবং সংস্করণ তখনই অ্যারে যোগদান (বিশেষত আইই) দিয়ে খুব দ্রুত গতিতে পেরেছিলেন
jAndy

1
আমি আপনার ক্ষমা প্রার্থনা করছি যাতে এইরকম একটি পুরানো প্রশ্ন পুনরুদ্ধার হয়েছে, তবে আমার পক্ষে মূল্যবান হওয়া উচিত var output = [a.slice(0, position + 1), b, a.slice(position)].join('');, আমি ওপেনগুলিকে "আমি একটি আপেল চাই" দেই, "আমি চাই অ্যাপল" instead
paulvs

13
@ পলভন কোনও কিছুর সংশোধন করা কখনই ভুল নয়, তাই ক্ষমা করার প্রয়োজন নেই। যাইহোক, আমি একমত না। কার্যকরীভাবে তার উদ্দেশ্যটি যা করে তা করে, অন্য স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট অবস্থানে একটি স্ট্রিং .োকান। প্রকৃতপক্ষে stringোকানো স্ট্রিংটি "একটি" এর মতো হওয়া উচিত, যা এই উদাহরণে আরও সঠিক হবে।
jAndy

262
var output = a.substring(0, position) + b + a.substring(position);

সম্পাদনা: এর সাথে প্রতিস্থাপন .substrকরা হয়েছে .substringকারণ .substrএখন একটি লিগ্যাসি ফাংশন (প্রতি https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / স্ট্রিং / সুব্রাস্টার )


47
@ জঙ্কিসস্পেস jsperf.com/javascript-string-splice এর মতে, জেন্ডির উত্তরটির চেয়ে এই উত্তরটি 640x দ্রুত
পাওলো কোঘি - মনিকা

5
String.prototype.substrএখন অবচয় করা হয়েছে। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

2
substring এই ক্ষেত্রে অবচিত জন্য একটি সরাসরি প্রতিস্থাপন substr, তাই উত্তর হলো: var output = a.substring(0, position) + b + a.substring(position);
সীফিশ

এটি কঠোরভাবে অবহেলিত নয়, তবে উত্তরাধিকার, সুতরাং এটি প্রতিস্থাপনের জন্য একটি ভাল ধারণা সম্ভবত এটি .substring
হ্রাস পাবে

32

আপনি স্ট্রিং ক্লাসে এই ফাংশনটি যুক্ত করতে পারেন

String.prototype.insert_at=function(index, string)
{   
  return this.substr(0, index) + string + this.substr(index);
}

যাতে আপনি এটি কোনও স্ট্রিং অবজেক্টে ব্যবহার করতে পারেন:

var my_string = "abcd";
my_string.insertAt(1, "XX");

3
এটি একটি খারাপ অভ্যাস নেটিভ অবজেক্ট প্রোটোটাইপ পরিবর্তন করতে: stackoverflow.com/questions/14034180/...
jhujhul


9

আপনি যদি সূচিপত্র () এর মতো ব্যবহার করে অবস্থান নির্ধারণ করেন তবে এটি আরও ভাল :

function insertString(a, b, at)
{
    var position = a.indexOf(at); 

    if (position !== -1)
    {
        return a.substr(0, position) + b + a.substr(position);    
    }  

    return "substring not found";
}

তারপরে এইভাবে ফাংশনটি কল করুন:

insertString("I want apple", "an ", "apple");

দ্রষ্টব্য, আমি রিটার্নের স্টেটমেন্টের পরিবর্তে ফাংশন কলের "an" এর পরে একটি স্থান রেখেছি।


2
এটি যা চাওয়া হয়েছিল তা নয়। এমনকি যদি এটি হয়ে থাকে তবে আপনার যদি "এট" সাবস্ট্রিংয়ের একাধিক ঘটনা উপস্থিত থাকে তবে এটি কাজ করবে না
ইলাচেল

6

Underscore.String গ্রন্থাগার একটি ফাংশন যা হয়েছে ঢোকান

সন্নিবেশ (স্ট্রিং, সূচক, সাবস্ট্রিং) => স্ট্রিং

তাই ভালো

insert("Hello ", 6, "world");
// => "Hello world"

আমার দ্বারা নয়, তবে সম্ভবত প্রশ্নটিতে সেই লাইব্রেরির কোনও উল্লেখ ছিল না। তবে তিনি অন্যান্য লাইব্রেরি
আইএমওকেও

1
যদিও প্রয়োজনীয় না হলে আমি লাইব্রেরিগুলি ব্যবহার করা অপছন্দ করি, তবুও আমি
ডাউনটাতে

3

চেষ্টা

a.slice(0,position) + b + a.slice(position)

বা regexp সমাধান

"I want apple".replace(/^(.{6})/,"$1 an")


2
var array = a.split(' '); 
array.splice(position, 0, b);
var output = array.join(' ');

এটি ধীর হতে পারে তবে এর পূর্বে এবং তার পরে স্থান সংযোজনের বিষয়টি বিবেচনা করবে, আপনাকে অবস্থানের মানটি পরিবর্তন করতে হবে (2 এ, এটি এখন আরও স্বজ্ঞাত)


2

দ্রুত ঠিক করা! আপনি যদি ম্যানুয়ালি কোনও স্থান যোগ করতে না চান তবে আপনি এটি করতে পারেন:

var a = "I want apple";
var b = "an";
var position = 6;
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
console.log(output);

(সম্পাদনা করুন: আমি দেখতে পাচ্ছি যে এটির উপরে উত্তর দেওয়া হয়েছে, দুঃখিত!)


2

যদি ES2018 এর লুকবাইন্ড উপলব্ধ থাকে তবে আর একটি রেজিপ এক্স সমাধান, এটি নবম চরিত্রের পরে শূন্য-প্রস্থ অবস্থানে "প্রতিস্থাপন" করার জন্য এটি ব্যবহার করে (@ কামিল কিয়েস্কেজিউস্কির অনুরূপ, তবে ক্যাপচারিং গ্রুপে প্রাথমিক অক্ষরগুলি সংরক্ষণ না করে):

"I want apple".replace(/(?<=^.{6})/, " an")


1

ঠিক আছে শুধুমাত্র একটি ছোট পরিবর্তন 'উপরের সমাধান আউটপুট কারণ

"আমি একটি আপেল চাই"

পরিবর্তে

"আমি একটি আপেল চাই"

হিসাবে আউটপুট পেতে

"আমি একটি আপেল চাই"

নিম্নলিখিত সংশোধিত কোড ব্যবহার করুন

var output = a.substr(0, position) + " " + b + a.substr(position);

13
হ্যাঁ, এটা সম্ভবত না কাম্য আছে এই ক্ষেত্রে, কিন্তু একটি অতিরিক্ত স্থান স্বয়ংক্রিয়ভাবে যোগ প্রায় স্পষ্টভাবে মধ্যে কাম্য নয় সব ক্ষেত্রেই।
নিকফ

12
সঠিক সমাধানগুলি স্ট্রিং = 'an' এর মধ্যে ফাঁকা স্থান যুক্ত করা হবে না, আপনি এইভাবে ফাংশনটি পুনরায় ব্যবহার করতে পারেন
টশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.