【问题标题】:Javascript sorting numbers and textJavascript排序数字和文本
【发布时间】:2018-08-01 10:45:36
【问题描述】:

如何在 javascript 中使用 .sort() 函数对其进行排序?我知道我可以在这里添加一个比较函数,但我不确定我会如何编程。

之前

1 024c
100 000c
143c
1 020c
10 000c

之后

143c
1 020c
1 024c
10 000c
100 000c

【问题讨论】:

  • 您获得此输入的格式是什么?你是根据什么来排序的?你试过什么?
  • 你能展示你的第一个实现吗?
  • @void 我正在尝试订购一个与此文本类似的表格列。我已经尝试了非常基本的返回 a-b,它适用于只有文本的列
  • @confusedOne 在下面看到我的回答。

标签: javascript arrays columnsorting


【解决方案1】:

如果您的输入是一个数组,那么您可以使用比较器函数

(a,b) => a.replace(/[^\d.]/g, "") - b.replace(/[^\d.]/g, "")

这将从字符串中删除cspace 以形成数字并进行比较。请参阅下面的代码。

var data = ["1 024c",
"100 000c",
"143c",
"1 020c",
"10 000c"]

var sorted = data.sort( (a,b) => a.replace(/[^\d.]/g, "") - b.replace(/[^\d.]/g, ""));

console.log(sorted);

【讨论】:

  • 这看起来不错,但您可能希望将/ |c/g 替换为/\D/g/[^\d.]/g。第一个只保留数字。第二个只保留数字和小数。
  • @ScottSauyet 是有道理的。已编辑:)
【解决方案2】:

您似乎想根据其中的数字对其进行排序,同时排除空格。

x.sort(
    (eachObj, prevObj) => 
    parseInt(eachObj.replace(" ","")) - parseInt(prevObj.replace(" ","")) 
);

在 ES6 中

【讨论】:

  • 请注意,这会返回["143c", "1020c", "1024c", "10000c", "100000c"],这不是我们想要的。排序后需要保留空格。
  • @ScottSauyet 错过了这一点。已编辑。谢谢。
猜你喜欢
  • 2013-12-28
  • 2021-08-08
  • 2016-02-14
  • 1970-01-01
  • 2018-09-06
  • 2018-09-20
  • 2014-02-03
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多