美文网首页
Js中数组的sort函数对数组某一项进行排序

Js中数组的sort函数对数组某一项进行排序

作者: 枝枝呀 | 来源:发表于2019-04-26 16:55 被阅读0次

与友交流时,被问到一道数组排序的题:

①:

[
    {key:1, value: '123123'},
    {key:2, value: '123'},
    {key:3, value: '12312'},
    {key:4, value: '123111112'},
    {key:5, value: '12312'},
    {key:6, value: '12311112'}
]

②:

[
    {key: 2, value: "123"},
    {key: 3, value: "12312"},
    {key: 5, value: "12312"},
    {key: 1, value: "123123"},
    {key: 6, value: "12311112"},
    {key: 4, value: "123111112"}
]

要求把①根据数组里的’b'字段变成②那样。
前一天下午跟着大哥作为陪同去面了一个小哥,中间小哥被问到sort里a-b是升序还是降序。然后看到这道题时就想到了sort排序,此篇作为小笔记

w3school上对于sort的定义和用法原话是:

sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。默认排序顺序为按字母升序。(注意:当数字是按字母顺序排列时"40"将排在"5"前面。使用数字排序,你必须通过一个函数作为参数来调用。函数指定数字是按照升序还是降序排列。这种方法会改变原始数组!)

语法:

array.sort(sortfunction)
参数sortfunction可选。必须是函数。
sortfunction接收两个参数,这两个参数决定升序还是降序:a-b则表示升序,b-a则表示降序

sortfunction如果带参数,参数是一个比较函数。比较2个值,返回一个数字。参数 a 和 b,其返回值如下:

若 a < b,则返回负数
若 a == b,则返回 0
若 a > b,则返回正数
所以当函数返回值为1的时候就交换两个数组项的顺序,否则就不交换。

API复习完了,我们来把题做完,根据哪一项排序,就取出这一项的值做对比就好:

arr.sort(function (a, b){
    var val1 = a.value;
    var val2 = b.value;
    return val1 - val2;
})

多条件排序也可以在sortfunction函数了进行多次判断,这是对number的排序,如果是对string,sort则会按照ASCII字符进行排序

sort函数对数字排序无效

有时候会遇到排序无效的问题:

let arr = [1,10, 15, 3,  5, 25, 3];
arr.sort(); 

你以为会输出: [1, 3, 3, 5, 10, 15, 25] ?
实际会输出:[1, 10, 15, 25, 3, 3, 5]

这是为什么呢,在源码里我们可以看到,sort方法会调用每个数组项的toString()方法

x = TO_STRING(x);
y = TO_STRING(y);

ASCII字符里,5和3大于10
解决办法呢,自己手动设置sort返回规则的函数作为sortfunction的参数传过:

let compare = function (a, b) {
    if (a < b) {
        return -1;
    } else if (a > b) {
        return 1;
    } else {
        return 0;
    }
}

这样就正常了。

最后给出一篇简友写的sort用的是什么排序算法的文:
https://www.jianshu.com/p/0ddbc3c8f683

相关文章

  • 由一道数组排序题引发的与V8引擎源码的美丽邂逅

    一、冒泡排序 二、数组重排序 数组的sort()方法传参为函数,并且直接运行了函数对数组中的每一项进行排...

  • 数组排序相关

    数组排序相关 结合sort和函数排序: 数组由小到大进行排序:sort,sortnum; vararr = [...

  • 从小到大,从大到小,PHP 数组排序

    数组排序:数组中的元素能够以字母或数字顺序进行升序或降序排序。 PHP - 数组的排序函数 sort() - 以升...

  • 对象数组如何排序-Comparable接口详解

    1 普通数组使用Arrays.sort方法排序 在Arrays工具类中,sort函数可以对普通数组进行排序,如以下...

  • PHP之数组键值排序

    数组中的元素能够以“字母或数字顺序”进行“升序或降序”排序 PHP 数组排序函数: sort() - 以升序对数组...

  • js手写数组排序

    一. js的sort()方法 sort() 方法用于对数组的元素进行排序,同时需要一个额外的排序函数sortNum...

  • Js中数组的sort函数对数组某一项进行排序

    与友交流时,被问到一道数组排序的题: ①: ②: 要求把①根据数组里的’b'字段变成②那样。前一天下午跟着大哥作为...

  • sort原理

    sort()对数组进行排序,原数组改变 sort()方法没有参数时,按照ascii码对元素进行排序 sort()方...

  • 6.数组排序

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如...

  • ts 数组排序

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如...

网友评论

      本文标题:Js中数组的sort函数对数组某一项进行排序

      本文链接:https://www.haomeiwen.com/subject/vuwfnqtx.html