我有如下一系列数字:
const a = ["11-50", "2-10", "1", "51-200"]
我想把它们分类,就像
["1", "2-10", "11-50", "51-200"]
我尝试过这两种排序方法,但都没有结果:
a.sort((a, b) => a - b)
a.sort()
发布于 2022-03-28 22:40:56
我们可以尝试在每个范围内对下限数字进行排序:
const input = ["11-50", "2-10", "1", "51-200"];
input.sort(function(a, b) {
return parseInt(a.split("-")[0]) - parseInt(b.split("-")[0]);
});
console.log(input);
发布于 2022-03-28 22:40:46
免责声明:parseInt
可能并不总是做你想做的事情,但是在这个例子中,它应该能工作!
a.sort((a, b) => parseInt(a) - parseInt(b));
发布于 2022-03-28 22:48:24
更正式一点,编写一些代码,将表示形式从字符串改为数字,然后返回.
const string2Range = string => string.split('-').map(parseInt);
const range2String = range => `${range[0}-${range[1]}`;
定义什么使范围比另一个小..。
// low value?
const compLow = (rangeA, rangeB) => rangeA[0] - rangeB[0]
// midpoint value?
const midpoint = range => (range[1] - range[0]) / 2;
const compMid = (rangeA, rangeB) => midpoint(rangeA) - midpoint(rangeB);
// something else??
然后转换,排序,转换回(假设需要字符串输出)
let input = ["11-50", "2-10", "1", "51-200"]
let ranges = input.map(string2Range);
ranges.sort(compLow); // or another you define
let output = ranges.map(range2String)
https://stackoverflow.com/questions/71654445
复制相似问题