2011-01-17 3 views
1

У меня есть строка, как это, что дробится:Javascript: постепенно добавляя строку в каждую итерацию?

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

То, что я хотел бы в каждой итерации для того, чтобы вернуть

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

Я имею в виду использование уменьшающего индекс для цикла .. .. но есть ли более эффективный подход?

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

OTOH это самый простой Подход

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

Вы можете избежать использования инструкции if с помощью метода 'join()'. – 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); 
} 
Смежные вопросы