是否可以用一些 "between" 数字对数组进行排序?
Is it possible to sort array with some "between" numbers?
是否有可能以某种方式用一些“介于”之间的数字对数组进行排序?
[31, 33/34, 34, 29].sort((a, b) => a.toString().localeCompare(b.toString()))
//至return [29, 31, 33/34, 34]
相反 [0.9705882352, 29, 31, 34]
如评论中所述,唯一可行的方法是使用字符串来捕获数字。引擎会将您的 33/34
存储为小数。无法取回原始值。
这样做只是一个简单的解析和排序。
var nums = ['31', '33/34', '34', '29']
nums.sort((a, b) => Number(a.split('/')[0]) - Number(b.split('/')[0]));
console.log(nums);
如果您可以有多个数字将 33/34 推到正确的位置,现在您可能需要添加更多逻辑。不知道所有的用例,我不会尝试猜测。
当转换为字符串时,您正在转换分数 33/34 (=0.9705882352
)。这就是 JS 解释器可见的所有内容:提供 0.9705882352
或 33/34
或 66/68
并不重要。因此,正如@ninascholz 和@epascarello 所指出的,您必须从字符串开始。使用字符串,您的代码应该可以正常工作,如下面的演示所示:
const nums = ['31', '33/34', '34', '29']
nums.sort((a, b) => a.localeCompare(b));
console.log( nums );
是否有可能以某种方式用一些“介于”之间的数字对数组进行排序?
[31, 33/34, 34, 29].sort((a, b) => a.toString().localeCompare(b.toString()))
//至return [29, 31, 33/34, 34] 相反 [0.9705882352, 29, 31, 34]
如评论中所述,唯一可行的方法是使用字符串来捕获数字。引擎会将您的 33/34
存储为小数。无法取回原始值。
这样做只是一个简单的解析和排序。
var nums = ['31', '33/34', '34', '29']
nums.sort((a, b) => Number(a.split('/')[0]) - Number(b.split('/')[0]));
console.log(nums);
如果您可以有多个数字将 33/34 推到正确的位置,现在您可能需要添加更多逻辑。不知道所有的用例,我不会尝试猜测。
当转换为字符串时,您正在转换分数 33/34 (=0.9705882352
)。这就是 JS 解释器可见的所有内容:提供 0.9705882352
或 33/34
或 66/68
并不重要。因此,正如@ninascholz 和@epascarello 所指出的,您必须从字符串开始。使用字符串,您的代码应该可以正常工作,如下面的演示所示:
const nums = ['31', '33/34', '34', '29']
nums.sort((a, b) => a.localeCompare(b));
console.log( nums );