2016-11-08 47 views
0

所以我正在做一個練習,我必須對給定的字符串進行排序。字符串中的每個單詞都包含一個數字(寫成'H3llo')。字符串的每個字中的數字應按照要返回的新字符串中的數字排列。麻煩用Javascript while循環,我做錯了什麼?

例如,如果我的輸入是「is2 Thi1s T4est 3a」,那麼我的函數應該返回「Thi1s is2 3a T4est」。

我幾乎破解它,但我的輸出是不完整的。這裏是我的代碼:

function order(words) { 
    var lst = words.split(' '); 
    var count = 0; 
    var n = count + 1; 
    var s_n = n.toString(); 
    var new_l = []; 
    while (count < lst.length) { 
     if (lst[count].includes(s_n) === true) { 
      new_l.push(lst[count]) 
     } 
     count++ 
    } 
    return new_l.join(' '); 
} 

當我測試了一下,而不是得到:

console.log(order("is2 Thi1s T4est 3a")); 
>>> 'Thi1s is2 3a T4est' 

我得到這個:

console.log(order("is2 Thi1s T4est 3a")); 
>>> 'Thi1s' 

任何人都可以向我解釋什麼,我做錯了什麼?

+2

你應該早晚學習['Array#sort'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)。 –

+1

需要在循環內設置'n'和's_n'。 – Malk

+0

做了迄今爲止仍然不起作用的所有建議 – MountainSlayer

回答

-1

你在做的主要事情是錯誤的是你在你的循環之前將s_n賦給了字符串'1',但是你永遠不會在循環中更新它。在更新計數的同時,您需要將s_n更新爲下一個整數的字符串。

所以你'固定'你沒有更新你的外部循環中的n或s_n值的部分,但代碼仍然不會工作,因爲你現在使用計數來增加你正在尋找的數字用於(在一個單詞內)並且通過單詞列表增加搜索。你需要一個內部循環(和另一個變量)來增加搜索。

+0

我把'n ++','count ++'和's_n = n.toString();'在while循環中,我得到了更糟糕的結果。 – MountainSlayer

+0

是的,除非您更改其他代碼錯誤的東西,否則它仍然無法正常工作。 – Penguino

+0

請閱讀[回答] –

2

您基本上需要兩個loops - 一個用於您當前的計數器count即遞增數字,另一個用於迭代單詞列表以匹配該數字。只有在完成對列表的迭代後,才能增加計數。

function order(words) { 
 
    var lst = words.split(' '); 
 
    var count = 0; 
 
    var new_l = []; 
 
    while (count <= lst.length) { 
 
    for (i = 0; i < lst.length; i++) { 
 
     if (lst[i].includes(count)) { 
 
     new_l.push(lst[i]) 
 
     } 
 
    } 
 
    count++; 
 
    } 
 
    return new_l.join(' '); 
 
} 
 
console.log(order("is2 Thi1s T4est 3a"));

注意過,你不需要s_n - 轉換是隱式的,你不需要=== true,因爲這是在if聲明中隱含的。