【问题标题】:JavaScript sorting a string of integersJavaScript 对一串整数进行排序
【发布时间】:2015-02-05 01:49:09
【问题描述】:

所以我有这个表格,它接收一串数字,需要在每个分号和空格处分割。然后,它对数字进行排序并返回排序后的列表。

由于某种原因,当我单击按钮时,它不会在文本框中发布值。

谁能帮我解决我的问题!谢谢。

编辑1:将名称添加到表单并添加字段集

function sort() {
  var allNumbers = document.mainForm.mainSet.numbers.value.split("; ");
  allNumbers.parseFloat;
  for (var i = 0; i < allNumbers.length; i++) {
    allNumbers[i] = parseInt(allNumbers[i], 10);
  }
  allNumbers.sort();
  document.mainForm.mainSet.sorted.value = allNumbers.toString();
}
<form name="mainForm">
<fieldset name="mainSet">
  Enter Numbers:
  <input type="text" class="text" name="numbers" />
  <br/>
  <br/>Select Option:
  <select name="sortOption" id="dropDown">
    <option value="Ascending" class="select">Ascending</option>
    <option value="Descending" class="select">Descending</option>
  </select>
  <br/>
  <br/>Sorted Numbers:
  <input type="text" class="text" name="sorted">
  <br/>
  <br/>
  <input type="button" value="Sort Numbers" id="submit" onclick="sort()" />
</fieldset>
</form>

【问题讨论】:

  • 您查看控制台输出 (F12) 了吗?
  • 您采取了哪些基本调试步骤?您是否查看过 allNumbers 使用 console.log() 语句或在调试器中的内容?您的首要任务是逐行跟踪您的代码并找出问题所在。始终查看控制台是否有错误。将调试语句插入到您需要查看的输出变量中(或了解如何在调试器中单步调试您的代码)。通过所有开发人员必须学习的简单调试/故障排除技术,您的答案将显而易见。
  • @JBaczuk 我只是检查了控制台输出,它给了我一个错误,在我声明 var allNumbers 的行中显示“Uncaught TypeError: Cannot read property 'value' of undefined”
  • @Harbus 那是因为您必须使用 document.getElementById('numbers') 按类或 ID 查找 DOM 元素。
  • @Harbus,通常在最初提出问题时应该提供这类信息(错误消息)。之后,最好edit your question 提供该详细信息而不是添加评论。 SO 的工作方式与论坛不同,旨在成为一个有用的 QA 网站,无需所有闲聊。欢迎来到 SO :)

标签: javascript html arrays string parsing


【解决方案1】:

我认为这就是您要寻找的。这将按照您在 sortOption 字段中选择的内容对号码进行排序。

var order;
function sort() {
  order = document.getElementById("dropDown").value;
  var allNumbers = document.getElementById("numbers").value.split("; ");
  var nums = [];
  for (var i = 0; i < allNumbers.length; i++) {
    nums.push(parseInt(allNumbers[i], 10));
  }
  nums.sort(function(a, b) {
    if (a > b)
      return order == 'asc' ? 1 : -1;
    else
      return order == 'asc' ? -1 : 1;
  });
  document.getElementById("sorted").value = nums.toString();
}
<form name="mainForm">
  <fieldset name="mainSet">
    Enter Numbers:
    <input id="numbers" type="text" class="text" name="numbers" />
    <br/>
    <br/>Select Option:
    <select name="sortOption" id="dropDown">
      <option value="asc" class="select">Ascending</option>
      <option value="desc" class="select">Descending</option>
    </select>
    <br/>
    <br/>Sorted Numbers:
    <input id="sorted" type="text" class="text" name="sorted">
    <br/>
    <br/>
    <input type="button" value="Sort Numbers" id="submit" onclick="sort()" />
  </fieldset>
</form>

【讨论】:

  • 好吧,你似乎已经解决了我的问题!我目前正在研究所有更改以确保我完全理解它,因为我讨厌不知道某些东西是如何工作的。非常感谢。
  • 'order' 的赋值应该在排序函数之外,因为它是一个循环不变量。为了速度,其实传递给sort()的函数应该是根据所选顺序的值来选择的函数变量。
【解决方案2】:

我在 HTML 中没有看到任何名为“mainForm”或“mainSet”的元素。同样,我不完全确定“allNumbers.parseFloat;”的目的是什么也是,因为这不是调用函数的方式,而且 parseFloat 不是 Array 的成员。

【讨论】:

  • 这不是问题的答案。您已经解释了问题所在,但没有告诉您如何解决。
  • "allNumbers.parseFloat;"不是一回事。 JS 解析器不知道如何处理它。它应该出来。 imtheman 的响应更接近目标。
【解决方案3】:

function sort() {
    function asc(a,b)
    {
        return a - b;
    }
    
    function desc(a,b)
    {
        return b - a;
    }

    var allNumbers = document.getElementById("numbers").value.split("; ");
    var nums = [];
    var order = document.getElementById("dropDown").value;
    for (var i = 0; i < allNumbers.length; i++) {
        nums.push(parseInt(allNumbers[i], 10));
    }
    nums.sort((order == 'asc') ? asc : desc);
    document.getElementById("sorted").value = nums.toString(',');
}
<form name="mainForm">
  <fieldset name="mainSet">
    Enter Numbers:
    <input id="numbers" type="text" class="text" name="numbers" />
    <br/>
    <br/>Select Option:
    <select name="sortOption" id="dropDown">
      <option value="asc" class="select">Ascending</option>
      <option value="desc" class="select">Descending</option>
    </select>
    <br/>
    <br/>Sorted Numbers:
    <input id="sorted" type="text" class="text" name="sorted">
    <br/>
    <br/>
    <input type="button" value="Sort Numbers" id="submit" onclick="sort()" />
  </fieldset>
</form>

【讨论】:

  • 拆分可能也应该使用 /\s*;\s*/ 而不是 "; ",但我担心前面的答案中的排序功能很尴尬。
猜你喜欢
  • 2013-04-11
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
相关资源
最近更新 更多