Javascript实现对象数组根据某一元素的值进行排序

本文介绍了一个在前端开发中用于对后端传来的对象列表按指定属性值进行排序的高阶函数,包括升序和降序两种模式,并给出了使用示例。建议将其存入util文件夹中供项目复用。

前言

在开发过程中有时需要前端对后端传来的对象列表数据根按某项元素值进行排序以实现一些业务。

自定义方法

下面是一个可以满足该需求的高阶函数,attr为数组排序是依据对象的哪一个属性,rev为升序还是降序,默认为升序,true表示升序,false表示降序。

function sortBy(attr,rev){
      //第二个参数没有传递 默认升序排列
        if(rev ==  undefined){
            rev = 1;
        }else{
            rev = (rev) ? 1 : -1;
        }
        
        return function(a,b){
            a = a[attr];
            b = b[attr];
            if(a < b){
                return rev * -1;
            }
            if(a > b){
                return rev * 1;
            }
            return 0;
        }
    }

方法的使用

let arr=[{
    id:3,
    name:'张三'
},{
    id:1,
    name:'李四'
},{
    id:6,
    name:'王五'
},{
    id:4,
    name:'李四'
}]

console.log(arr.sort(sortBy("id",false)))
//[{id:1,name:'李四'},
//id:3,name:'张三'},
//{id:4,name:'李四'},
//{id:6,name:'王五'}]

建议将该方法直接复制到util文件夹中。

JavaScript 中,若需要对对象数组根据某一字段的字符串进行排序,可以通过 `Array.prototype.sort()` 方法结合比较函数来实现。此方法适用于对象数组中某个属性为字符串类型的情况,并且可以灵活地指定升序或降序排列。 例如,假设有一个对象数组 `people`,其中每个对象都有一个 `name` 字段作为字符串,按照该字段进行排序实现如下: ```javascript const people = [ { name: "Charlie", age: 25 }, { name: "Alice", age: 30 }, { name: "Bob", age: 20 } ]; people.sort((a, b) => a.name.localeCompare(b.name)); console.log(people); // 输出: [ { name: 'Alice', age: 30 }, { name: 'Bob', age: 20 }, { name: 'Charlie', age: 25 } ] ``` 上述代码中使用了 `localeCompare()` 方法来比较两个字符串,它能够提供本地化的字符串比较规则,适用于多语言环境下的排序需求[^1]。通过将 `localeCompare()` 应用于 `sort()` 方法中的比较函数,可以实现基于字符串字段的排序操作。 如果希望按照降序排列,则可以调整比较函数的逻辑,如以下示例所示: ```javascript people.sort((a, b) => b.name.localeCompare(a.name)); console.log(people); // 输出: [ { name: 'Charlie', age: 25 }, { name: 'Bob', age: 20 }, { name: 'Alice', age: 30 } ] ``` 此方式确保对象数组按照 `name` 字段从 Z 到 A 的顺序排列[^1]。 ### 结合多字段排序排序逻辑不仅依赖于字符串字段,还需要结合其他数型字段共同决定最终顺序,可以使用多个比较函数。例如,先按 `name` 排序,再按 `age` 排序: ```javascript const testArr = [ { name: "Charlie", age: 25 }, { name: "Alice", age: 30 }, { name: "Alice", age: 20 } ]; testArr.sort((a, b) => { const nameComparison = a.name.localeCompare(b.name); if (nameComparison !== 0) return nameComparison; return b.age - a.age; }); console.log(testArr); // 输出: [ { name: 'Alice', age: 30 }, { name: 'Alice', age: 20 }, { name: 'Charlie', age: 25 } ] ``` 以上方法允许在主排序字段相同的情况下,使用次字段进一步细化排序结果[^1]。 ### 总结与扩展 - 使用 `sort()` 方法配合 `localeCompare()` 可以实现字符串字段的排序。 - 支持升序和降序排列,只需调整比较函数的参数顺序。 - 可结合多个字段实现更复杂的排序逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值