首页 > 解决方案 > 按两个不同的属性javascript对项目进行排序

问题描述

我有一个对象数组。

const people = [
   {
     active: true,
     hasMoney: false
   },
   {
     active: false,
     hasMoney: false
   },
   {
     active: true,
     hasMoney: true
   }
]

我想按以下顺序对数据进行排序:active: true-> hasMoney: true-> active: false->hasMoney: false

重要提示:如果用户是active === trueand hasMoney === true,那么这应该在active === trueand之后排序hasMoney === false

我尝试了以下但没有奏效。有人有想法么?

people
  .sort((x, y) =>
     x.hasMoney
       ? Number(x) - Number(y)
       : Number(isPersonActive(y)) - Number(isPersonActive(x))
)

标签: javascript

解决方案


您可以获取布尔值的增量,并按两个属性进行排序,特别是对相同值的排序。

const people = [{ active: false, hasMoney: true }, { active: true, hasMoney: false }, { active: false, hasMoney: false }, { active: true, hasMoney: true }];

people.sort((a, b) =>
    b.active - a.active || 
    (a.hasMoney === b.active) - (a.active === b.hasMoney)
);

console.log(people);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读