javascript - 对包含数字和字符串的数组进行排序
问题描述
我正在尝试对包含字符串、数字和数字的数组进行排序(例如'1'、'2')。我想对这个数组进行排序,以便排序后的数组首先包含数字,然后是包含数字的字符串,最后是字符串。
var arr = [9,5,'2','ab','3',-1 ] // to be sorted
arr.sort()
// arr = [-1, 5, 9, "2", "3","ab"] // expected result
//arr = [-1, "2", 5, 9, "ab"] // actual result
我也试过
var number =[];
var char =[];
arr.forEach(a=>{
if(typeof a == 'number') number.push(a);
else char.push(a);
})
arr = (number.sort((a,b)=> a>b)).concat(char.sort((a,b)=> a>b))
// arr = [-1, 5, 9, "2", "3","ab"] // expected result
// arr = [-1, 5, 9, "2", "ab", "3"]// actual result
解决方案
最短的大概是:
arr.sort((a, b) => ((typeof b === "number") - (typeof a === "number")) || (a > b ? 1 : -1));
推荐阅读
- php - 作为对象键迭代器的 PHP 数组元素
- python - 循环分组的DataFrame
- wordpress - 后台根据SKU排序订单
- c# - C#/UWP 中的屏幕截图
- javascript - 在 react 中更改 react-calendar 的日期格式
- spring-data-elasticsearch - spring data Elasticsearch 动态映射
- php - 在 AWS 中设置 Web 服务器数据库 - 无法理解指令的 dbinfo.inc 文件部分
- reactjs - 从另一个文件加载 React 组件
- keras - 当我添加 step_per_epoch 且 epoch=1 时,训练 ETA 为 5 小时
- flutter - 由于版本失败,获取包无法正常工作