当前位置: 首页 > article >正文

JS 数组排序方法 - sortFun

在前端开发中,经常需要对数组进行排序操作。在 JavaScript 中,数组的排序方法是 sort(),但是它并不支持根据指定的字段进行排序。因此,我们需要自己实现一个根据指定字段进行排序的方法。本文将介绍一个基于 JavaScript 的数组排序方法 sortFun,它可以根据指定的字段进行排序,并支持升序和降序两种排序方式。

1. 排序方法 sortFun

sortFun 是一个 JavaScript 函数,可以通过传递三个参数来对数组进行排序。具体的函数定义如下:

/**
 * @method sortFun
 * @param arr 要传递的排序对象数组
 * @param name 要传递的排序字段
 * @param type 要传递的排序类型 默认升序:order 降序:desc
 */
const sortFun = (arr, name, type) => {
  const compare = (prop) => {
    return function(obj1, obj2) {
      let val1 = obj1[prop];
      let val2 = obj2[prop];
      if (val1 < val2) {
        return -1;
      } else if (val1 > val2) {
        return 1;
      } else {
        return 0;
      }
    }
  }
  if (type == 'desc') {
    return arr.sort(compare(name));
  } else {
    return arr.sort(compare(name)).reverse();
  }
}

其中,arr 是要排序的数组,name 是要排序的字段名,type 是排序类型,可以是 'order'(升序,默认值)或 'desc'(降序)。函数内部使用了 compare 函数来定义排序规则,根据指定的字段名对数组中的元素进行排序。

2. 排序规则 compare

compare 函数是 sortFun 函数内部定义的,它接受一个参数 prop,表示要根据哪个字段进行排序。具体的函数定义如下:

const compare = (prop) => {
  return function(obj1, obj2) {
    let val1 = obj1[prop];
    let val2 = obj2[prop];
    if (val1 < val2) {
      return -1;
    } else if (val1 > val2) {
      return 1;
    } else {
      return 0;
    }
  }
}

其中,obj1 和 obj2 分别表示要比较的两个对象,prop 表示要根据哪个字段进行排序。函数内部通过访问对象的属性来获取相应的值,然后进行比较。如果第一个对象的属性值小于第二个对象的属性值,则返回 -1;如果第一个对象的属性值大于第二个对象的属性值,则返回 1;如果两个对象的属性值相等,则返回 0。

3. 排序示例

使用 sortFun 函数进行排序非常简单,只需要传递要排序的数组、要排序的字段名和排序类型即可。下面是一些示例代码:

const arr = [
  { name: 'Tom', age: 20 },
  { name: 'Jerry', age: 18 },
  { name: 'John', age: 25 }
];

// 按 name 字段升序排序
const sortedArr1 = sortFun(arr, 'name', 'order');
console.log(sortedArr1); // [{ name: 'Jerry', age: 18 }, { name: 'John', age: 25 }, { name: 'Tom', age: 20 }]

// 按 age 字段升序排序
const sortedArr2 = sortFun(arr, 'age', 'order');
console.log(sortedArr2); // [{ name: 'Jerry', age: 18 }, { name: 'Tom', age: 20 }, { name: 'John', age: 25 }]

// 按 name 字段降序排序
const sortedArr3 = sortFun(arr, 'name', 'desc');
console.log(sortedArr3); // [{ name: 'Tom', age: 20 }, { name: 'John', age: 25 }, { name: 'Jerry', age: 18 }]

 从上面的示例可以看出,`sortFun` 函数非常方便易用,可以根据不同的字段和排序类型对数组进行排序。

4. 总结

本文介绍了一个 JavaScript 数组排序方法 `sortFun`,它可以根据指定的字段进行排序,并支持升序和降序两种排序方式。具体的实现原理是定义一个 `compare` 函数,根据指定的字段对数组中的元素进行比较,然后使用 JavaScript 数组对象的 `sort()` 和 `reverse()` 方法对数组进行排序和反转操作。 希望本文能够帮助大家更好地理解 JavaScript 数组的排序操作。如果有任何问题或建议,欢迎在评论区留言。

作者:Emo_TT。


http://www.kler.cn/a/8210.html

相关文章:

  • 【Elasticsearch入门到落地】1、初识Elasticsearch
  • 15 个改变世界的开源项目:塑造现代技术的先锋力量
  • 综合案例铁锅炖(CSS项目大杂烩)
  • Chromium 中sqlite数据库操作演示c++
  • 即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
  • Python的Web请求:requests库入门与应用
  • Kotlin 面向对象(二)
  • Redis —缓存常见异常
  • 父子组件传值问题
  • Ludwig Otto Hölder
  • php企业公司员工考勤加班系统
  • 面试被问到:测试计划和测试方案有什么区别?
  • 派盘为您的个人数据安家
  • 一篇文章,弄懂蓝牙协议怎么看,进军物联网!
  • 【WCH】基于Keil环境CH32F203 GPIO点灯实验
  • 全国青少年电子信息智能创新大赛(复赛)python·模拟三卷,含答案解析
  • 1mm³大小,世界首个功率破KW的单芯片激光模组诞生
  • Unity入门开发资源链接
  • Flask项目运行报错解决:sqlalchemy.exc.OperationalError
  • 给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位
  • C++整人代码,十分朴实但威力无穷,让你对cout怀疑人生,整死你的同学
  • 线性回归讲解
  • 阿里巴巴春招的后端面经来啦~
  • yolov5-v7.0实例分割快速体验
  • CIE (PCI Express) 1x, 4x, 8x, 16x总线端子说明
  • 4.7--计算机网络之TCP篇之socket编程--(复习+深入)---好好沉淀,加油呀