javascript - 对包含数字和字符串的数组进行排序

标签 javascript arrays string ecmascript-6 numbers

我正在尝试对包含字符串、数字和数字作为字符串(例如“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));

关于javascript - 对包含数字和字符串的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958419/

相关文章:

php - 让 PHP 解析大文件是否比从 MySQL 数据库调用数据更快?

java - 在 Java 中解析 JavaScript 代码以检索变量的名称

string - Swift – 带逗号分隔符的字符串加倍

Javascript - 添加图像

Javascript 游戏 - IIFE 之间的废物管理

javascript - 在两个文档 JavaScript 之间传递变量

android - 如何将字符数组从 JNI 发送到 android

c++ - 在函数中更改数组值 - 内联汇编

string - 如何用内部@""@封装脚本,用外部@""@

javascript - 以无冲突的方式将 Bootstrap Accordion 添加到具有旧版本 jQuery 的网站