随笔 - 35, 文章 - 0, 评论 - 6, 阅读 - 58149
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

js根据多个对象属性按顺序对数组进行排序

Posted on   地霊殿~三無  阅读(779)  评论(0编辑  收藏  举报

一、遇到的情况

需要对数组进行排序,按属性1,属性2,属性3。。。的优先级进行升序或降序

 

二、 解决方法

采用js中数据的sort排序方法,

const arr = [需要排序的数据内容]
arr.sort(this.compareType('属性名', '属性名1', '属性名2', '属性名3', '升序用up降序用down'))
//compareType是定义好的函数

自定义排序函数 compareType(目前仅实现4属性顺位排序,可自行删除或增加)

复制代码
compareType(propertyName, propertyName1, propertyName2, propertyName3, str) {
      if (str === 'down') {
        // 降序的
        return function(a, b) {
          if (b[propertyName] === a[propertyName]) {
            // 第一顺位相同时,找第2顺位
            if (b[propertyName1] === a[propertyName1]) {
              // 第二顺位相同时,找第3顺位
              if (b[propertyName2] === a[propertyName2]) {
                // 第三顺位相同时,找第4顺位
                return b[propertyName3] - a[propertyName3]
              } else {
                return b[propertyName2] - a[propertyName2]
              }
            } else {
              return b[propertyName1] - a[propertyName1]
            }
          } else {
            return b[propertyName] - a[propertyName]
          }
        }
      } else {
        // 升序的
        return function(b, a) {
          if (b[propertyName] === a[propertyName]) {
            // 第一顺位相同时,找第2顺位
            if (b[propertyName1] === a[propertyName1]) {
              // 第二顺位相同时,找第3顺位
              if (b[propertyName2] === a[propertyName2]) {
                // 第三顺位相同时,找第4顺位
                return b[propertyName3] - a[propertyName3]
              } else {
                return b[propertyName2] - a[propertyName2]
              }
            } else {
              return b[propertyName1] - a[propertyName1]
            }
          } else {
            return b[propertyName] - a[propertyName]
          }
        }
      }
    }
复制代码

 

ps: 偶尔更新一下,如有错误,还请指正

相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
Live2D
点击右上角即可分享
微信分享提示