js数组转换成字符串对象(js正则表达式用法)

在日常的代码开发中,关于数组排序的操作可不少,JavaScript中可以调用sort方法对数组进行快速排序。今天,就数组的sort方法来学习一下,避免日后踩坑的悲惨遭遇。概念sort方法用于对数组的元素进行排序。语法arr.sort(co

在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序。

今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇。

概念

sort 方法用于对数组的元素进行排序。

语法

arr.sort([compareFunction])

参数解析

compareFunction (可选)

用来指定按某种顺序进行排列的函数。该函数有两个参数:

  • firstEl 第一个比较的元素
  • secondEl 第二个比较的元素

该函数如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。

返回值

排序后的数组。

请注意,数组已原地排序,并且不进行复制。

犹记得当年第一次使用数组排序的场景:查到有个 sort 方法后,赶紧用起来, 结果……,如下:

const arr = [49, 5, 14, 89, 71, 3, 10];
arr.sort();
// 输出 [10, 14, 3, 49, 5, 71, 89]

看到结果的瞬间,整个人有点方了。

js数组转换成字符串对象(js正则表达式用法)

这就有点不讲武德了,说好的排序呢?再三确认我的机器没毛病后,赶紧查文档,看看文档怎么说:

如果没有指明 compareFunction ,那么元素会按照转换为的字符串的逐个字符的Unicode位点进行排序。

这么一解释的话,上面数组的排序可以作一下理解:

  1. 首先,将数组里的数字逐个转换为字符串,得到 [’49’, ‘5’, ’14’, ’89’, ’71’, ‘3’, ’10’] 。
  2. 再按照首位的字符的 Unicode 位点来算的话:1 的编码在 3 之前,所以 10 和 14 排在了 3 之前3 的编码在 4 之前,所以 49 排在了 3 的后面……如果首位字符的编码相同,则比较第二位字符的编码,比如 10 排在了 14之前(0 和 4 的比较结果)

道理貌似是通了,但是这不是我想要的结果,看来还是得靠比较函数 compareFunction ,我们来看看这个 compareFunction 到底是何方神圣。

用法

基本用例如下:

const arr = [49, 5, 14, 89, 71, 3, 10];

// 一般写法
arr.sort(function (a, b) {
return a - b; // 按照升序排列
});

// 箭头函数
arr.sort((a, b) => a - b);

// 结果 [3, 5, 10, 14, 49, 71, 89]

以上是按照升序排列的写法,如果要按照降序排列,只需把比较函数中的 return a – b; 改为 return b – a;。

对象数组排序

sort() 方法除了可以用于数字数组和字符数组的排序外,还可用于对象数组的排序:

var items = [
{name: \'Edward\', value: 21},
{name: \'Sharpe\', value: 37},
{name: \'And\', value: 45},
{name: \'The\', value: -12},
{name: \'Magnetic\'},
{name: \'Zeros\', value: 37}
];

// sort by value
items.sort(function (a, b) {
return (a.value - b.value)
});

// sort by name
items.sort(function (a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}

// names must be equal
return 0;
});

对非 ASCII 字符排序

当排序非 ASCII 字符的字符串(如包含类似 e, é, è, a, ä 等字符的字符串)。一些非英语语言的字符串需要使用 String.localeCompare。这个函数可以将函数排序到正确的顺序。

var items = [\'réservé\', \'premier\', \'cliché\', \'communiqué\', \'café\', \'adieu\'];
items.sort(function (a, b) {
return a.localeCompare(b);
});

// items is [\'adieu\', \'café\', \'cliché\', \'communiqué\', \'premier\', \'réservé\']

使用映射改善排序

compareFunction 可能需要对元素做多次映射以实现排序,尤其当 compareFunction 较为复杂,且元素较多的时候,某些 compareFunction 可能会导致很高的负载。使用 map 辅助排序将会是一个好主意。基本思想是首先将数组中的每个元素比较的实际值取出来,排序后再将数组恢复。

// 需要被排序的数组
var list = [\'Delta\', \'alpha\', \'CHARLIE\', \'bravo\'];

// 对需要排序的数字和位置的临时存储
var mapped = list.map(function(el, i) {
return { index: i, value: el.toLowerCase() };
})

// 按照多个值排序数组
mapped.sort(function(a, b) {
return +(a.value > b.value) || +(a.value === b.value) - 1;
});

// 根据索引得到排序的结果
var result = mapped.map(function(el){
return list[el.index];
});

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/26048.html

(0)
nan
上一篇 2021-09-17
下一篇 2021-09-17

相关推荐

  • win7升级win10系统详细步骤(win7更新到win10)

    虽然升级win10很重要,但我们也需要考虑我们的计算机是否适合win10系统。如果我们的计算机很旧,不建议升级win10计算机系统。由于计算机比较旧,很难支持win10系统。如果我们强制升级win10系统,最终的结果是安装了计算机系统,但

    2021-12-11 科技
    0
  • 目前耐玩的网络游戏(分享可以玩很久的网络游戏)

    Steam游戏平台是全球最大的游戏平台,在这个平台上,有很多不同类型的作品,它们有得耐玩,有得好玩,很多都得到了玩家们的肯定与欢迎。下面我来给大家推荐10款耐玩的Steam游戏,不少玩家玩了上百个小时表示入手血赚。《方舟:生存进化》《方舟:生存进化》

    2021-10-01 科技
    0
  • 很多花椒直播内都是什么样的人(评价花椒直播)

    直播老将、花椒六间房集团CEO刘岩提到过,直播平台的真正使命,应该是一个老百姓的舞台。他会在闲暇时一个人坐火车去东北,寻找有关产品的全新思路。这个虚拟场景里的舞台,也给所有心怀梦想的人提供了一个全新的途径去展示自己,比如《快乐女声》和《花儿朵朵》出身

    2021-10-23 科技
    0
  • 软件签名怎么弄(设计自己的签名软件推荐)

    使用过苹果手机的用户都知道,想要安装一款app一般都是在AppStore里下载的,AppStore是苹果官方app的下载渠道,其中testflight也是苹果官方认可的一种内测渠道,也就是说,除了这两种被苹果官方认可的渠道,其他的渠道是无法安装到苹果

    2021-10-23
    0
  • 充电太慢解决办法(手机充电慢是什么原因)

    有时候给手机充电充了好久,可是电量却只有50%,明明之前充电都很快的,但是为什么有时又很慢了呢?那手机充电慢是什么原因呢?下面我们就来好好了解一下吧。手机充好慢的原因很多,如电压不稳,电池内部保护;锂电池充电保护,防止频繁充电;放电过程与充

    2021-12-11
    0
  • 打开网页提示缺少对象脚本错误的解决方法(当前页面的脚本发生错误)

    打开浏览器后,浏览网页时却提示脚本错误缺少对象,这是什么问题?浏览器在浏览网页时,偶尔会出现缺少对象的脚本错误,这个问题在IE浏览器上非常常见,下面就给大家介绍具体解决方法。解决方法:1、打开查看网页的浏览器(IE为例),从“工具”选

    2021-12-11 科技
    0

发表回复

登录后才能评论