2016-05-03 10 views
3

私はいつかこのような問題に取り組んでいます。インデックスをどうするかを考えようとしています。ここで問題です:JavaScript - インデックスに影響を与えずに配列に要素を挿入しますか?

私は、文字列を持っている:使用thisIsGreat 基本的な操作は怒鳴るです:

var str = "thisIsGreat"; 
str = str.split(''); //Making it an array 
..... 
str = str.join(''); //String it back again 
console.log(str); 

所望の出力:["t","h","i","s"," ","I","s"," ","G","r","e","a",t"]

私はそれらの単語の間にスペースを挿入するに苦労していますインデックスに影響を与えることはありません。私はこのようなことを試みたが、うまくいかなかった。

for (var i = 0; i < str.length; i++){ 
    if (str[i]+1 == (str[i].toUpperCase())+1) 
     str[i] = " "; 
} 

これを修正する方法はありますか?何かご意見は?あなただけの最後に参加削除した文字列として結果をしたくない場合は

+0

あなたは同じ配列を使用する必要がありますか?結果として別のものを生成できませんか? –

+0

はい、私は必要に応じて新しい配列を生成することができます。 – Bishop

+0

For(var in something)は、オブジェクトのすべてのプロパティを取得するために使用され、配列の要素は取得されません。あなたは正確に何を達成しようとしていますか? –

答えて

8

ます肯定的な先読みで置き換えることができます。

var str = "thisIsGreat"; 
 
    
 
str = str.replace(/(?=[A-Z])/g, ' ').split(''); 
 
document.write('<pre>' + JSON.stringify(str, 0, 4) + '</pre>');

+1

ありがとうございました!!!!問題が解決しました!! – Bishop

3

独自のロジック

var str = "thisIsGreat"; 
str = str.split(''); //Making it an array 
var result = []; 
for (var i in str){ 
if (str[i]+1 == (str[i].toUpperCase())+1){ 
    result.push(" "); 
    result.push(str[i]); 
}else{ 
    result.push(str[i]); 
    } 
} 
result = result.join(''); //String it back again 
console.log(result); 

を使用。

https://jsfiddle.net/Ldp58onu/2/

+0

私の論理を固めてくれてありがとう!うまくいく! – Bishop

4

あなただけの各大文字の前にスペースを挿入したい場合は、あなたの質問は、非常に明確ではありませんが、これは正規表現で非常に簡単です:

r = "thisIsGreat".replace(/[A-Z]/g, " $&"); 
 
alert(r)

+0

それはまさに私が必要としたものです!!!!!ありがとうございました! – Bishop

+1

ようこそ。ところで、ニナの答えはより正確です。 – georg

+0

:)問題は解決しました! – Bishop

1

ちょうどあなたのforループを逆転。

for (var i = str.length - 1; i >= 0; i--){ 
    if (str[i]+1 == (str[i].toUpperCase())+1) 
     str[i] = " "; 
} 
+0

あなたの洞察に感謝します! :) – Bishop

1
'thisIsGreat'.replace(/([A-Z])/g,' $1').split('').join('", "') 
//Output: "t", "h", "i", "s", " ", "I", "s", " ", "G", "r", "e", "a", "t" 
関連する問題