दूसरे स्ट्रिंग की स्थिति x पर स्ट्रिंग सम्मिलित करना


237

मेरे पास दो चर हैं और इसके द्वारा दर्शाए गए बिंदु पर स्ट्रिंग bमें स्ट्रिंग डालने की आवश्यकता aहै position। परिणाम मैं देख रहा हूँ "मुझे एक सेब चाहिए"। मैं जावास्क्रिप्ट के साथ यह कैसे कर सकता हूं?

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);


वैकल्पिक: स्ट्रिंग के एक प्रोटोटाइप विधि के रूप में

एक वैकल्पिक पैरामीटर के साथ निम्नलिखित को textवांछित दूसरे स्ट्रिंग में विभाजित करने के लिए इस्तेमाल किया जा सकता है ।indexremoveCount

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
लंबे स्ट्रिंग्स के लिए, यह समाधान तेज है (क्योंकि यह कॉपी करता है) निकफ के समाधान से कम है।
अंक

35
यह समाधान तेज नहीं है। मैं इस बारे में उत्सुक था और एक jsperf भाग गया। यह भविष्य में इसे पढ़ने वाले किसी भी व्यक्ति के लिए एक नोट है। jsperf.com/javascript-string-splice । नवीनतम FF / Chrome / IE10 / IE9 में परीक्षण किया गया। मैं स्पष्टता और प्रदर्शन दोनों के लिए इस पर लीन निकफ के दृष्टिकोण का उपयोग करूंगा।
रद्दी १५'१३

3
खैर, यह बहुत संभव है। यहाँ जवाब लगभग 3 साल पुराना है, अधिकांश ब्राउज़र और संस्करण तब वापस आ गए हैं, वास्तव में एक एरियर जॉइन (विशेषकर IE) के साथ तेजी से प्रदर्शन किया है ।
jAndy

1
मैं आपसे क्षमा चाहता हूं कि इस तरह के एक पुराने प्रश्न को पुनर्जीवित कर दिया है, लेकिन मैं इसके लायक var output = [a.slice(0, position + 1), b, a.slice(position)].join('');हूं कि मुझे "मैं एक सेब चाहिए" के बजाय ओपी को "मुझे एक सेब चाहिए"।
१२:१२ पर पौलव्स

13
@PaVVon कभी कुछ सही करने के लिए गलत नहीं है, इसलिए क्षमा करने की कोई आवश्यकता नहीं है। वैसे भी, मैं असहमत हूं। कार्यात्मक रूप से वह करता है जो उसका इरादा है, एक स्ट्रिंग को किसी अन्य स्थिति के भीतर एक निश्चित स्थिति में डालें। वास्तव में डाला स्ट्रिंग "ए" की तरह होना चाहिए, जो इस उदाहरण में अधिक सही होगा।
jAndy

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

संपादित करें: प्रतिस्थापित .substrसाथ .substringक्योंकि .substrअब एक विरासत समारोह है (प्रति https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )


47
@Junkyspace jsperf.com/javascript-string-splice के मुताबिक , यह जवाब jAndy के मुकाबले 640x तेज है।
पाउलो कोगी - मोनिका

5
String.prototype.substrअब पदावनत कर दिया गया है। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Tivie

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");

ध्यान दें, मैंने रिटर्न कॉल के बजाय फ़ंक्शन कॉल में "a" के बाद एक स्थान रखा।


2
यह वह नहीं है जो यह पूछा गया था। यहां तक ​​कि अगर यह मामला था, तो यह काम नहीं करेगा यदि आपके पास "सब-ऑन"
सब्स्टीट्यूट

6

Underscore.String पुस्तकालय एक समारोह है कि करता है सम्मिलित

सम्मिलित करें (स्ट्रिंग, इंडेक्स, सबस्ट्रिंग) => स्ट्रिंग

इस तरह

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

मेरे द्वारा नहीं, लेकिन शायद इसलिए कि प्रश्न में उस पुस्तकालय का कोई उल्लेख नहीं था। लेकिन वह भी अन्य पुस्तकालयों IMO को बाहर करने के लिए प्रतीत नहीं होता है ..
डेनिस 98

1
हालाँकि, जब तक आवश्यक न हो, मैं पुस्तकालयों का उपयोग करना पसंद नहीं करता, फिर भी मैंने नीचे की ओर ऑफसेट किया: P
froggomad

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 का लुकअप उपलब्ध है , तो एक और रीजैक्सप सॉल्यूशन, जो कि Nth कैरेक्टर (@Kamil Kiełczewski के समान) पर शून्य-चौड़ाई की स्थिति में "रिप्लेस" करने के लिए इसका उपयोग करता है , लेकिन एक कैप्चरिंग ग्रुप में प्रारंभिक वर्णों को देखे बिना:

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


1

अच्छी तरह से सिर्फ एक छोटा सा परिवर्तन 'उपरोक्त समाधान आउटपुट का कारण बनता है

"मुझे एक सेब चाहिए"

के बजाय

"मुझे एक सेब चाहिए"

के रूप में उत्पादन प्राप्त करने के लिए

"मुझे एक सेब चाहिए"

निम्नलिखित संशोधित कोड का उपयोग करें

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

13
हां, यह इस मामले में शायद वांछनीय नहीं है , लेकिन एक अतिरिक्त स्थान को स्वचालित रूप से जोड़ना लगभग सभी मामलों में वांछनीय नहीं है ।
निकफ

12
स्ट्रिंग = 'a' में रिक्त स्थान जोड़ने के लिए सही समाधान नहीं होगा, इस तरह से आप फ़ंक्शन का पुनः उपयोग कर सकते हैं
Tosh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.