复杂数组排序

4 篇文章 0 订阅
/**
 * 数据排序 // 本次改动提交 是由老李确认并且认可的情况下修改的
 * @param {* Array } arr 需要排序的数组
 * @param {* String } field 排序字段
 * @param {* String } order 排序方式 desc || asc
 * @returns Array
 */
export const sortArray = (arr, field, order = 'asc') => {
    // 汉字开头
    const chineseReg = new RegExp('^[\u4e00-\u9fa5]')
    let wordArr = []
    let noWordArr = []
    let isAsc = order === 'asc'
    const collatorCN = new Intl.Collator('zh-CN');
    const collatorUC = new Intl.Collator('en-US');
    arr.forEach(item => {
        if (chineseReg.test(item[field]) && field) wordArr.push(item)
        else if (chineseReg.test(item)) wordArr.push(item)
        else noWordArr.push(item)
    })
    if (field) {
        wordArr = wordArr.sort((pre, next) => {
            // if (isAsc) return pre[field].localeCompare(next[field])
            // else return next[field].localeCompare(pre[field])
            if (isAsc) return collatorCN.compare(pre[field] ?? '',next[field] ?? '')
            else return collatorCN.compare(next[field] ?? '',pre[field] ?? '')
        })

        noWordArr = noWordArr.sort((pre, next) => {
            if(field === 'ord') {
                if (isAsc) return (pre[field] ?? '') - (next[field] ?? '')
                else return (next[field] ?? '') - (pre[field] ?? '')
            } else {
                if (isAsc) return collatorUC.compare(pre[field] ?? '',next[field] ?? '')
                else return collatorUC.compare(next[field] ?? '',pre[field] ?? '')
            }
        })

    } else {
        wordArr = wordArr.sort((pre, next) => {
            if (isAsc) return collatorCN.compare(pre,next)
            else return collatorCN.compare(next,pre)
        })
        noWordArr = noWordArr.sort((a,b) => {
            if (isAsc) return collatorUC.compare(a,b)
            else return collatorUC.compare(b,a)
        })
    }

    let sortRelust = isAsc ? [...noWordArr, ...wordArr] : [...wordArr, ...noWordArr]
    return sortRelust
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白开水丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值