2010-12-06 7 views
147

私は2つのvarsを持ち、この位置にbを挿入する必要があります。私が探している結果は、 "私はリンゴがほしい"です。 jqueryやjavascriptでこれをどうすればできますか?上記の溶液の出力原因ほんの少しの変更」別のストリングの位置xにストリングを挿入する

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

答えて

258

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

+3

長い文字列の場合、このソリューションはnickfのソリューションよりも高速です(コピーが少ないため)。 – pts

+23

このソリューションはそれほど高速ではありません。私はこれについて興味があり、jsperfを走らせました。これは、将来これを読む人にとってのメモです。 http://jsperf.com/javascript-string-splice。最新のFF/Chrome/IE10/IE9でテスト済みです。私は、明快さとパフォーマンスの両方のために、これに対してlean nickfのアプローチを使用します。 – junkyspace

+3

まあ、それは非常に可能です。ここでの答えは、ほぼ3歳で、そのあとのブラウザとバージョンの大部分は、* Array * join(特にIE)の方が実際に速く実行されました。 – jAndy

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

Insert

インサート(文字列、インデックス、サブストリング)=>列

を行う機能を有しています。 //jsperf.com/javascript-string-splice、この回答は、jAndyのものより** 640倍高速**です。 –

1

まあ

は "私が欲しいanapple"

代わりの

"私はリンゴをしたい"

として出力を取得するには、 "私はリンゴをしたい"

次変更されたコード

を使用
var output = a.substr(0, position) + " " + b + a.substr(position); 
+8

はい、おそらく* this *の場合は望ましくありませんが、余分なスペースを自動的に追加することは、*すべての*ケースではほとんど間違いありません。 – nickf

+8

文字列= 'an'にスペースを追加するのが正しい解決策ではないでしょうか?この方法で、関数を再利用することができます – Tosh

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

これは遅くなるだろうが、前のスペースの追加の世話をします。また 後、あなたは位置の値を変更する必要があります

25

(2には、それは今より直感的です)たぶん

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

私は:あなたは任意の文字列オブジェクト上でそれを使用することができることを

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

ので、文字列クラスにこの機能を追加することができます

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

注意を私は「の後にスペースを入れていることを、あなたはのindexOf()このようなを使用して位置を決定した場合tはさらに良いです"関数の呼び出しではなく、returnステートメントで。

+1

これは尋ねられたものではありません。このような場合でも、 "at"部分文字列が複数現れた場合には、これはうまくいかないでしょう – elachell

2

Underscore.Stringライブラリは@junkyspace HTTPSによるよう

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

なぜこの回答は下降しましたか? – svarog