使用javascript以特定顺序对具有十进制值的数组进行排序
Posted
技术标签:
【中文标题】使用javascript以特定顺序对具有十进制值的数组进行排序【英文标题】:sorting array with decimal value in specific order using javascript 【发布时间】:2019-05-14 20:10:33 【问题描述】:我有一个数组:
let arr = ['100.12', '100.8', '100.11', '100.9'];
排序后得到输出:
'100.11',
'100.12',
'100.8',
'100.9',
但我希望它像页面索引一样排序:
'100.8',
'100.9',
'100.11',
'100.12',
编辑:
我几乎没有什么好的解决方案,但它们缺少一个地方,例如:
arr1 = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9']
结果会是这样的:
["77.8", "77.9", "77.11", "77.12", "77", "88", "100.8", "100.11", "100.12", "100", "100.9", "119", "120"]
这里预计是:
[ "77", "77.8", "77.9", "77.11", "77.12", "88", "100", "100.8", "100.11", "100.12", "100.9", "119", "120"]
【问题讨论】:
我尝试过像这样的排序:arr.sort(function (a, b) return Number(a ) - Number(b); );
例如:arr1 = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', ' 100.8', '100.11', '100', '100.9'] 结果如下: ["77.8", "77.9", "77.11", "77.12", "77", "88", "100.8", " 100.11"、"100.12"、"100"、"100.9"、"119"、"120"] 这里预期为:["77"、"77.8"、"77.9"、"77.11"、"77.12"、"88" ”、“100”、“100.8”、“100.11”、“100.12”、“100.9”、“119”、“120”]
【参考方案1】:
不是简单的oneliner。你想先按整数部分排序,如果相等,再按小数部分。
const arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
const sorted = arr.sort((a, b) =>
if (parseInt(a) !== parseInt(b))
return parseInt(a) - parseInt(b);
return (parseInt(a.split('.')[1], 10) || 0) - (parseInt(b.split('.')[1], 10) || 0);
);
console.log(sorted);
【讨论】:
看看OP想要的结果。 感谢@NirTzezana,已修复。 这几乎就在那里,但它会导致问题,因为它们是这个数组中的一个整数,例如:arr1 = ['100.12', '77.8', '88', '77.11', '77.12' , '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'] 结果会是:["77.8", "77.9", "77.11" ,“77.12”,“77”,“88”,“100.8”,“100.11”,“100.12”,“100”,“100.9”,“119”,“120”] 这里预期是:[“77”, “77.8”、“77.9”、“77.11”、“77.12”、“88”、“100”、“100.8”、“100.11”、“100.12”、“100.9”、“119”、“120”]跨度> @sumitsharma 对此进行了调整,只是为了完整起见,即使您接受了其他答案:)【参考方案2】:您可以使用 string#localeCompare
和 numeric
属性根据数值对数组进行排序。
let arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
arr.sort((a, b) => a.localeCompare(b, undefined, numeric: true))
console.log(arr)
【讨论】:
这是awsm,非常感谢 这不适用于更多的十进制值。如此,让Arr = ['100.123456','77 .84356','88 .12345','77 .112345','77 .125467','77.92345','77345.456','119.1234','120.345567','100.89876','100.11876','100.11876','100.11877354', '100.03245', '100.9'];以上是关于使用javascript以特定顺序对具有十进制值的数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery 或 javascript 计算具有特定值的行数?