关于前端:Js-sort方法

对于sort(),MDN是这样说的:sort()办法用原地算法对数组的元素进行排序,并返回数组。默认排序程序是在将元素转换为字符串,而后比拟它们的UTF-16代码单元值序列时构建的。

因为它取决于具体实现,因而无奈保障排序的工夫和空间复杂性。简略的来讲,如果间接应用,可能后果并不是咱们所冀望的。例如:

var arr = [2,3,13,17,4,19,1];
arr.sort() // 后果:[1, 13, 17, 19, 2, 3, 4]

咱们发现并没有依照从小到大进行排序,然而sort()办法提供了比拟函数作为参数,是用来指定按某种程序进行排列的函数。具体如下:

语法: arr.sort([compareFunction])

参数:
compareFunction 任选

firstEl: 第一个用于比拟的元素。
secondEl: 第二个比拟的元素。

形容:
指明了 compareFunction ,那么数组会依照调用该函数的返回值排序。即 a 和 b 是两个将要被比拟的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的绝对地位不变。备注: ECMAScript 规范并不保障这一行为,而且也不是所有浏览器都会恪守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对雷同的输出返回雷同的比拟后果,否则排序的后果将是不确定的。

从解释看,还是比拟含糊,上面咱们间接看实例:

// 升序
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);// [1, 2, 3, 4, 5]

// 降序
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => b - a);
console.log(numbers);// [5, 4, 3, 2, 1]

// 能够依据某个属性对对象数组进行排序
var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic' },
  { name: 'Zeros', value: 37 }
];
items.sort((a,b) => {
    return a.value - b.value
});
/**
[
    {
        "name": "The", 
        "value": -12
    },
    {
        "name": "Edward",
        "value": 21
    },
    {
        "name": "Sharpe",
        "value": 37
    },
    {
        "name": "And",
        "value": 45
    },
    {
        "name": "Magnetic"
    },
    {
        "name": "Zeros",
        "value": 37
    }
]
**/

又到了总结的时候:

在工作中,用的最多的就是对数据的排序,无非就是升序跟降序了。记住的办法就是:a - b,a在前升序,b - ab在前降序

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理