资讯专栏INFORMATION COLUMN

sort排序问题

zero / 2392人阅读

摘要:是一个返回函数,表示排序的依据它有俩个参数,分别为需要比较的俩个数机器的排序是通过俩俩比较来进行排序的,基本用法与的比较结果会根据返回值正数负数来进行排序。如果反过来返回值为,那么和的顺序就变了。

w3school上对sort()用法的定义为:arrayObject.sort(sortby)
顾名思义 :排序对象.排序(排序方法)
arrayObject直接 跳过了。
sort详解也暂时先跳过,我略看了下源码,对于arrayObject的排序并不是多带带使用的一种,个数少的时候用的插入排序,个数多的时候用的快速排序。
直接说 sortby的用法。

sortby 是一个 返回函数 ,表示排序的依据,
它有俩个参数,分别为需要比较的俩个数(机器的排序是通过俩俩比较来进行排序的),
基本用法 :function(a,b){return a与b的比较结果}
sortby 会根据返回值 正数/0/负数 来进行排序。正数会顺序颠倒,负数和0顺序不动。

简单的数字排序:
先讲下浅层次的原理

比如说 [1,2].sort((a,b)=>a-b)
这个比较只有一次 1和2 比较,代入函数,sortby返回值 为 -1 ,那么 1和2 顺序不变。
如果反过来[1,2].sort((a,b)=>b-a)
sortby返回值为1 ,那么1和2 的顺序就变了。
总结下也用法:
从小到大排序 array.sort((a,b)=>a-b);
从大到小排序:array.sort((a,b)=>b-a);

复杂点的Json排序。
这个有点类似于dataTable中的排序。
我平时创建一个数据表的时候,也都是通过json数组 遍历创建的。
比如说:let data = [{name: "a",age:14},{name: "d",age:10},{name: "c",age:32},{name: "b",age:5}];

首先通过name来排序。

data.sort((a,b)=>a["name"].localeCompare(b["name"]));

localeCompare表示本地默认排序方式。
a["name"].localeCompare(b["name"])
表示按照本地排序的方式,以a.name与b.name的排序方式来排序data;

如果想反过来排序的话怎么办的话:
上面说过,sortby的排序只根据正数/0/负数,那么字母之间肯定也是有这样的大小规律,倒序排序的话,只要把返回值变成其相反数即可。
b["name"].localeCompare(a["name"]);
或者
-(a["name"].localeCompare(b["name"]));

通过age排序
age排序和上面的数字排序是一样的使用方法,从a-b变成了a[age]-b[age];

再复杂点的中文排序:

其实中文排序简单粗暴地转出拼音排序就可以了...
为什么说复杂呢,是因为要导入一个巨大的js,而且还需要转行成拼音。
比如说:

let pinyin = {a:"u554au963fu9515",
ai:"u57c3u6328u54ceu5509u54c0u7691u764cu853cu77eeu827eu788du7231u9698u8bf6u6371u55f3u55ccu5ad2u7477u66a7u7839u953fu972d",
...}

获取拼音的方法:

 function(word){
    for(let key in pinyin){
          if(pinyin[key].includes(word)){
            return key;
        }
    }}

然后就可以按照字母的排序方式来进行排序了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92478.html

相关文章

  • sort实现orderby

    摘要:工作到了这个年数感觉那些基本函数语法已经跟人合一了根本不会为操作一些数据结构而思考半天了在做小程序的时候遇到了个的场景结果发现没有以为的那么简单也许是之前不求甚解的原因那么现在来解决的问题问题的产生与探讨方向在小程序中有个将的某一条置顶的需 工作到了这个年数, 感觉那些基本函数语法已经跟人合一了, 根本不会为操作一些数据结构而思考半天了. 在做小程序的时候遇到了个orderby的场景,...

    jiekechoo 评论0 收藏0
  • 深入浅出 JavaScript 的 Array.prototype.sort 排序算法

    摘要:快速排序是不稳定的排序算法。浏览器的实现不同有什么影响排序算法不稳定有什么影响举个例子某市的机动车牌照拍卖系统,最终中标的规则为按价格进行倒排序相同价格则按照竞标顺位即价格提交时间进行正排序。 本文要解决的问题 1、找出 Array.prototype.sort 使用的什么排序算法 2、用一种直观的方式展示 Array.prototype.sort 的时间复杂度,看看它有多快? 3、...

    itvincent 评论0 收藏0
  • php 二维数组排序

    摘要:前提给定一个二维数组,请根据指定的数组写出最优的排序。排序条件,指定数组如下估计大家都没有什么问题,排序嘛,简单的不要不要的方式一这应该是最简单的方式了,直接使用现成的函数,快捷的不要不要的。 前提 给定一个二维数组,请根据指定的数组key,写出最优的排序。排序条件age asc,sex desc,指定数组如下: $arr = [ [id=>1, age=>1,...

    ashe 评论0 收藏0
  • CodeSalt | Python解决按学生年龄排序的实际问题

    摘要:解决按学生年龄排序的实际问题问题定义一个包含姓名性别年龄,需要按年龄给学生排序。输出按照年龄进行排序好的。思路使用冒泡排序,比较相邻的学生,如果第一个学生的值比第二个学生的值大,那么就整体交换这两个元素。 Python解决按学生年龄排序的实际问题 问题:定义一个Class:包含姓名name、性别gender、年龄age,需要按年龄给学生排序。输入:包含学生对象的List。输出:按照年龄...

    yangrd 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<