使用Javascript while循环时出现问题,我做错了什么?

时间:2016-11-08 21:11:02

标签: javascript while-loop

所以我正在做一个练习,我必须对给定的字符串进行排序。字符串中的每个单词都包含一个数字(这样写成' H3llo')。应根据要返回的新字符串中的数字按顺序放置字符串每个单词中的数字。

例如,如果我的输入是" 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 个答案:

答案 0 :(得分:2)

您基本上需要两个loops - 一个用于当前计数器count,即增量号码,另一个用于迭代单词列表以匹配该数字。只有在完成对列表的迭代后才能增加计数。

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

另请注意,您不需要s_n - 转换是隐含的,您不需要=== true,因为if语句中隐含了这一点

答案 1 :(得分:-1)

你做错的主要是你在循环之前将s_n分配给字符串'1',但是你永远不会在循环中更新它。在更新计数的同时,需要将s_n更新为下一个整数的字符串。

所以你'修复'你没有在你的外循环中更新n或s_n的值的部分,但代码仍然无法工作,因为你现在使用count来增加你正在寻找的数字(在单词中)并通过单词列表增加搜索。你需要一个内循环(和另一个变量)来增加搜索。