javascript - 如何根据对象属性按照我选择的顺序对javascript中的数组中的对象进行排序?
问题描述
假设我有一个这样的数组:
var objects = [
{ name: "steve", status: added },
{ name: "john", status: added },
{ name: "drew", status: none },
{ name: "aaron", status: none },
{ name: "jeff", status: hidden },
{ name: "gil", status: hidden },
{ name: "marc", status: removed },
{ name: "bill", status: removed }
];
...我想按状态对其进行排序,但有:
- 首先是“删除”的,
- “添加”的第二个,
- “无”的第三个,和
- “隐藏”的最后。
看到这不是按字母顺序排列的,我将如何使用 sort 方法来做到这一点?
我能想到的唯一想法是使每个具有各自状态的对象成为一个数组,然后将它们重新连接在一起。谢谢你。
解决方案
给定名为 objects 的数组变量,您应该实现一个 sort compareFunction:
objects = [
{ name: "steve", status: added },
...
]
你应该使用:
objects.sort(compareFunction);
其中 objects 是您的数组实例, compareFunction 是您可以使用标准定义的函数。
在比较函数中,根据您的排序标准返回 1、0 或 -1。
例如,您可以使用辅助关联对象:
var aux = {
"removed": 1, "added": 2, "none": 3, "hidden": 4
};
那么您的比较功能将是:
objects.sort(function(a,b) {
return aux[a.status] - aux[b.status];
});
推荐阅读
- go - 如何解析具有一个标签的基本 XML 数据
- javascript - 尝试升级旧的hammer.js (v1.0.5) 脚本。在 iOS 上垂直滚动时遇到问题
- python - 如何在 tensorflow.keras 中实现 AttentionDecoder?
- python - 获取一个数据框列相对于另一个数据框列值的值
- c# - asp.net core web api读取BLOB
- c++ - 弹出窗口在从标题项的右上角开始的矩形中显示垂直标题文本
- android - 无法从 xml 文件使用主活动文件中的进度值。它显示未解决的引用
- node.js - 创建一个用于测试的 sqlite 数据库
- c++ - 在 C++ 中读取文本文件并将数据存储在二维数组中
- arm - gdb 核心转储:信息共享显示什么