2011-01-17 18 views
1

私が分割され、このような文字列があります。それは私がforループをデクリメントインデックスを使用して考えていますJavascript:徐々に各繰り返しで文字列に追加しますか?

Iteration 0: "last" 
Iteration 1: "third>last" 
Iteration 2: "second>third>last" 
Iteration 3: "first>second>third>last" 

を返すようにするために、私は、各反復で希望何

var tokens = "first>second>third>last".split(">"); 

は..です..より効果的なアプローチはありますか?この大藤

for (int w = tokens.length-1; w == 0; w--) 
{ 

} 

答えて

3
var tokens = "first>second>third>last".split(">"); 

var out = [] 

while(tokens.length) { 
    out.unshift(tokens.pop()); 
    console.log(out.join('>')) 
} 
+0

-1。このスタックベースのアプローチはきちんとしているが間違っている。それはOPが要求しなかったトークンの順序を逆転させます。配列型の 'unshift()'メソッドの使用は、あなたが望むことをするはずですが、Internet Explorerのいくつかのバージョンでは動作しないかもしれません。 – fmark

+0

@fmark、ありがとう、私は十分注意深く読んでいないが、修正するのはかなり簡単だった。 – mikerobi

+0

@mikerobi申し訳ありませんが、あなたの修正版はまだ間違っています。これで、トークンリストの間違った「終わり」からの出力が生成されます。 'out'変数は、入力するトークンではなく、出力する前に逆にする必要があります。 – fmark

0

最も簡単なaproach

var tokens = "first>second>third>last".split(">"); 

text = '' 
for (w = tokens.length-1; w >= 0; w--) 
{ 
    if(text != ''){ 
     text = tokens[w] + '>'+text; 
    }else{ 
     text = tokens[w] 
    } 

    console.log(text); 
} 
+0

-1暗黙的なグローバルの場合、常に 'var'キーワードを使用します。 –

+0

'join()'メソッドを使ってif文を使用することを避けることができます。 – fmark

-1
var tokens = "first>second>third>last".split(">"); 
var text = []; 
for (var i = tokens.length; --i >= 0;) { 
    text.unshift(tokens[i]); 
    var str = text.join(">"); 
    alert(str); // replace this with whatever you want to do with str 
} 

はトリックを行う必要があります。

0

次の操作を試みることができる:

var tokens = "first>second>third>last".split(">"); 

for (var w = 0; w < tokens.length; w++) 
{ 
    var substr = tokens.slice(tokens.length - 1 - w, tokens.length).join(">"); 
    console.log("Iteration " + w + ": " + substr) 
} 
0

あなたはまた、元の分割を逆に参加し使用することができます。効率についてはわかりませんが、わかりやすいです:

var tokens = 'first>second>third>last'.split('>'); 

for (var i = tokens.length - 1; i >= 0; --i) { 
    var subset = tokens.slice(i).join('>'); 
    console.log(subset); 
} 
関連する問題