【javascript】实现数组、对象的排序功能

在 JavaScript 中实现排序功能可以通过内置的 Array.prototype.sort() 方法。这个方法可以对数组元素进行排序,排序规则可以通过传入一个比较函数来定制。下面我将展示几种使用 sort() 方法进行排序的例子。

一、按照时间排序

1、对象按时间从大到小排序

/**
 * 对象按时间从大到小排序
 * @param data 要排序的数据
 * @param rule 以哪个字段来判断排序
 * @returns {*}
 */
function sortFromBigToSmall(data, rule) {
  return data.sort(function(a, b) {
    a = new Date(a[rule]).getTime()
    b = new Date(b[rule]).getTime()
    return parseInt(b) - parseInt(a)
  })
}

2、对象按时间从小到大排序

/**
 * 对象按时间从小到大排序
 * @param data 要排序的数据
 * @param rule 以哪个字段来判断排序
 * @returns {*}
 */
function sortFromSmallToBig(data, rule) {
  return data.sort(function(a, b) {
    a = new Date(a[rule]).getTime()
    b = new Date(b[rule]).getTime()
    return parseInt(a) - parseInt(b)
  })
}
二、按数字排序

1、规则升序排序

/**
 * 规则升序排序
 * @param data 要排序的数据
 * @param rule 以哪个字段来判断排序
 * @returns {*}
 */
function sortNumberFromSmallToBig (data, rule) {
  return data.sort(function(a, b) {
      const x = parseInt(a[rule] || 99)
      const y = parseInt(b[rule] || 99)
      return x - y
  })
}

2、规则降序排序


/**
 * 规则降序排序
 * @param data 要排序的数据
 * @param rule 以哪个字段来判断排序
 * @returns {*}
 */
export const sortNumberFromBigToSmall = function(data, rule) {
  return data.sort(function(a, b) {
     const x = parseInt(a[rule] || 99)
     const y = parseInt(b[rule] || 99)
     return y - x
  })
}

备注:Array.prototype.sort() 是一个非常强大的工具,可以灵活地对数组进行排序。通过提供一个比较函数,你可以定制任何你需要的排序逻辑。不过要注意,sort() 方法会直接修改原数组,如果需要保留原数组不变,可以在调用 sort() 之前先复制一份数组。

以上是笔者常用的几个排序方法,您可依据自身需要修改方法 

三、 Array.prototype.sort()排序判断

Array.prototype.sort() 方法在 JavaScript 中用于对数组的元素进行排序。它的行为取决于是否提供了比较函数。以下是两种情况的解释:

1、默认排序行为

当没有提供比较函数时,sort() 方法会将数组的所有元素转换为字符串,然后按照字符串的 Unicode 字符编码的顺序进行排序。这意味着它会逐字符地比较字符串,直到找到第一个不同的字符,然后根据这两个字符的 Unicode 编码点来决定排序的顺序。

例如,数组 [10, 2, 3, 20] 在默认排序下会变成 ["10", "2", "20", "3"],因为 "1" < "2" < "20" < "3"。

2、自定义排序行为

当提供了一个比较函数时,sort() 方法会使用这个函数来决定元素之间的顺序。比较函数应该接受两个参数,通常称为 a 和 b,并且返回一个数值:

  • 如果比较函数返回一个小于 0 的数,那么 a 会被排在 b 之前。
  • 如果比较函数返回 0,那么 a 和 b 的顺序不变。
  • 如果比较函数返回一个大于 0 的数,那么 b 会被排在 a 之前。

 3、稳定性

Array.prototype.sort() 的稳定性指的是相等的元素在排序后是否会保持它们原来的顺序。在 ECMAScript 2019(ES10)之前,sort() 方法的文档并没有明确规定它是稳定排序还是不稳定排序,这取决于具体的实现。然而,从 ES10 开始,规范要求 sort() 方法必须是稳定的。

这意味着如果两个元素被视为相等(根据比较函数),它们在排序后的数组中的相对位置不会改变。

总之,Array.prototype.sort() 方法的排序依据可以是默认的 Unicode 字符编码顺序,也可以是通过比较函数自定义的逻辑,且从 ES10 开始,该方法保证了排序的稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值