js 对象数组的排序

js 对象数组的排序

list.sortArr = function(arr,value,type){
	if("Asc" == type){
		arr.sort(list.byAsc(value));
	}else if("Desc" == type){
		arr.sort(list.byDesc(value));
	}
}
/* 对象数组排序
 * 排序,name:排序字段。 */
// 升序
list.byAsc = function(name){
    return function(o, p){
        var a, b;
        if (typeof o === "object" && typeof p === "object" && o && p) {
            a = o[name];
            b = p[name];
            
            if (a === b) {
                return 0;
            }
            if (typeof a === typeof b) {
                return a < b ? -1 : 1;
            }
            return typeof a < typeof b ? -1 : 1;
        }
        else {
            throw ("error");
        }
    }
}

// 降序
list.byDesc = function(name){
    return function(o, p){
        var a, b;
        if (typeof o === "object" && typeof p === "object" && o && p) {
            a = o[name];
            b = p[name];
            
            if (a === b) {
                return 0;
            }
            if (typeof a === typeof b) {
                return a > b ? -1 : 1;
            }
            return typeof a > typeof b ? -1 : 1;
        }
        else {
            throw ("error");
        }
    }
}

在 JavaScript 中,对包含对象数组进行排序时,可以通过 `Array.prototype.sort()` 方法结合自定义比较函数实现。该方法允许开发者根据对象中的某个属性值进行升序或降序排列。 ### 升序排序 若需根据对象中的某个属性进行升序排序,可以使用如下方式: ```javascript const arr = [ { name: '123', order: 3 }, { name: '123', order: 1 }, { name: '123', order: 8 }, { name: '123', order: 2 }, { name: '123', order: 6 }, { name: '123', order: 9 }, { name: '123', order: 0 } ]; arr.sort((a, b) => a.order - b.order); console.log(arr); ``` 上述代通过比较两个对象的 `order` 属性值来决定它们在排序后的相对位置,实现了升序排列[^3]。 ### 降序排序 如果需要按照属性值进行降序排列,则只需将比较表达式取反即可: ```javascript arr.sort((a, b) => b.order - a.order); console.log(arr); ``` 此方法通过返回 `b.order - a.order` 来确保数组按照指定属性的降序排列[^3]。 ### 多属性排序 对于更复杂的排序需求,例如根据多个属性进行排序,可以在比较函数中添加逻辑判断: ```javascript let arr = [ { name: "蓝色", spec: "颜色" }, { name: "少年", spec: "适用人群" }, { name: "黑色", spec: "颜色" }, { name: "年轻人", spec: "适用人群" }, { name: "111", spec: "规格a" }, { name: "222", spec: "规格a" }, { name: "aaa", spec: "规格aa" }, { name: "bbb", spec: "规格aa" } ]; arr.sort((a, b) => { if (a.spec !== b.spec) { return a.spec.localeCompare(b.spec); // 按照字符串自然顺序排序 } return a.name.localeCompare(b.name); // 如果spec相同,则按name排序 }); console.log(arr); ``` 该示例展示了如何先根据 `spec` 属性排序,如果 `spec` 相同,则进一步根据 `name` 属性排序[^5]。 ### 注意事项 - `sort()` 方法会改变原始数组。如果希望保留原始数组不变,可以先复制一份原数组再进行排序操作。 - 默认情况下,`sort()` 方法按照字符串的 Unicode 点顺序进行排序,因此处理数字或对象时必须提供自定义比较函数,否则排序结果可能不符合预期[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值