按十进制对数字数组进行排序
Sorting array of number by decimal
我正在尝试找出如何按小数对数字数组进行排序。
我是这个数组
[9, 9.10, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9]
通过使用排序,9.1 在 9.2 之前,但我需要的是在 9.9 之后有 9.1,所以顺序如下:
9, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 9,10
我怎样才能强制这样做?
谢谢
好吧,您必须将它们作为字符串而不是数字来处理。您需要将它们分成两部分,并根据部分而不是整体进行比较。
var items = ['9', '9.10', '9.2', '9.3', '9.9', '8', '7', '6'];
items.sort(function(a, b) {
const partsA = a.split(".");
const partsB = b.split(".");
if (partsA[0] === partsB[0]) {
return partsA[1] === partsB[1] ? 0 : (+partsA[1] || 0) > (+partsB[1] || 0) ? 1 : -1;
}
return +partsA[0] > +partsB[0] ? 1 : -1;
});
console.log(items);
我正在尝试找出如何按小数对数字数组进行排序。 我是这个数组
[9, 9.10, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9]
通过使用排序,9.1 在 9.2 之前,但我需要的是在 9.9 之后有 9.1,所以顺序如下:
9, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 9,10
我怎样才能强制这样做?
谢谢
好吧,您必须将它们作为字符串而不是数字来处理。您需要将它们分成两部分,并根据部分而不是整体进行比较。
var items = ['9', '9.10', '9.2', '9.3', '9.9', '8', '7', '6'];
items.sort(function(a, b) {
const partsA = a.split(".");
const partsB = b.split(".");
if (partsA[0] === partsB[0]) {
return partsA[1] === partsB[1] ? 0 : (+partsA[1] || 0) > (+partsB[1] || 0) ? 1 : -1;
}
return +partsA[0] > +partsB[0] ? 1 : -1;
});
console.log(items);