博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2022-04-08 17:24  地霊殿~三無  阅读(754)  评论(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: 偶尔更新一下,如有错误,还请指正

Live2D