javascript - 按两个不同的属性javascript对项目进行排序
问题描述
我有一个对象数组。
const people = [
{
active: true,
hasMoney: false
},
{
active: false,
hasMoney: false
},
{
active: true,
hasMoney: true
}
]
我想按以下顺序对数据进行排序:active: true
-> hasMoney: true
-> active: false
->hasMoney: false
重要提示:如果用户是active === true
and hasMoney === true
,那么这应该在active === true
and之后排序hasMoney === false
我尝试了以下但没有奏效。有人有想法么?
people
.sort((x, y) =>
x.hasMoney
? Number(x) - Number(y)
: Number(isPersonActive(y)) - Number(isPersonActive(x))
)
解决方案
您可以获取布尔值的增量,并按两个属性进行排序,特别是对相同值的排序。
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; }
推荐阅读
- c# - 想要检索 URL 的完整路径
- python - 有什么办法可以正常退货吗?
- java - 如何在集成测试中使用 Spring Security?
- core-data - 将 NSValueTransformer 更改为 NSSecureUnarchiveFromDataTransformer 以获取核心数据警告
- javascript - useEffect 中的道具“未定义”
- angular - 订阅不会更新 Angular 中的视图
- css - 如何在 React Native 中添加边框图像
- python - main.py 中的 .env 文件
- javascript - 使用javascript设置边距并根据窗口宽度进行更改
- javascript - 如何使机器人将单词输入到预设的文本块中(Discord.js)