You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按多个属性对对象数组进行升序排序

问题原因

你的代码存在两处逻辑错误:

  1. 判断顺序不符合优先级规则:你把divisible相等的判断放在了「pricePerUnitPerHour不相等」的分支下,永远不会触发「前两个属性都相等时按时间排序」的逻辑
  2. 当pricePerUnitPerHour相等时,你直接返回divisible的差值,当divisible也相等时会直接返回0,不会继续判断时间字段

修复方案

按照「价格→是否可拆分→创建时间」的优先级依次嵌套判断即可,正确代码如下:

arr.sort(function (a, b) {
  // 优先按pricePerUnitPerHour升序排序
  if (a.pricePerUnitPerHour !== b.pricePerUnitPerHour) {
    return a.pricePerUnitPerHour - b.pricePerUnitPerHour;
  }
  // 价格相等时按divisible排序,true排在false前面
  if (a.divisible !== b.divisible) {
    return b.divisible - a.divisible;
  }
  // 前两个属性都相等时按时间戳升序排序,本身是数字不需要转Date
  return a.creationDateTime - b.creationDateTime;
});

逻辑说明

  • 第一层直接对比优先级最高的pricePerUnitPerHour,数值不等时直接返回差值,无需走后续判断
  • 布尔值divisible会隐式转换为数字计算:true转1、false转0,b.divisible - a.divisible可以保证值为true的项排在前面
  • creationDateTime本身就是毫秒级时间戳数字,直接相减即可实现升序排序,不需要额外用new Date转换

内容的提问来源于stack exchange,提问作者user17190872

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:54:06