2016-11-08 54 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声明中隐含的。