javascript - 如何通过数组内的“sortby”键对该对象进行排序?
问题描述
{
"AA": [
{
"key_name": "category",
"value": "long",
"sortby": "3"
}
],
"BB": [
{
"key_name": "category",
"value": "long",
"sortby": "5"
}
],
"CC": [
{
"key_name": "category",
"value": "short",
"sortby": "1"
}
]
}
我需要使用键“sortby”对这个对象进行排序,并且它在一个数组中?任何人都可以帮忙吗?
解决方案
您应该创建一个对象键数组,然后根据数据中的属性值对其进行排序,然后将它们映射到一个新对象中:
const data = {
"AA": [
{
"key_name": "category",
"value": "long",
"sortby": "3"
}
],
"BB": [
{
"key_name": "category",
"value": "long",
"sortby": "5"
}
],
"CC": [
{
"key_name": "category",
"value": "short",
"sortby": "1"
}
]
}
const res = Object.keys(data).sort((a, b) => {
return parseInt(data[a][0].sortby, 10) - parseInt(data[b][0].sortby, 10)
});
const sortedData = {};
res.map(key => sortedData[key] = data[key]);
console.log(sortedData)
这不是一个好的做法,因为对象在 javascript 中是可变的,并且这种实现可能会给您带来很多麻烦。最好的方法是对它们进行排序,然后将它们推送到数组中:
const data = {
"AA": [
{
"key_name": "category",
"value": "long",
"sortby": "3"
}
],
"BB": [
{
"key_name": "category",
"value": "long",
"sortby": "5"
}
],
"CC": [
{
"key_name": "category",
"value": "short",
"sortby": "1"
}
]
}
const res = Object.keys(data).sort((a, b) => {
return parseInt(data[a][0].sortby, 10) - parseInt(data[b][0].sortby, 10)
}).map(key => ({ key, value: data[key] }));
console.log(res)
推荐阅读
- python - Widnows 10 上的“无法打开包含文件:'gsl/gsl_errno.h':没有这样的文件或目录”错误
- ruby-on-rails - 如何验证 HSTS 在 Rails 应用程序中是否按预期工作?
- python - .ppm 文件每 3 个像素分隔一次
- tensorflow - 张量流中的自定义层以输出其输入的运行最大值
- bazel - git repo 中非 bazel 项目的 Bazel 规则
- php - 使用 laravel 8 上传文件时不允许进行 Chmod() 操作
- google-apps-script - On[Event] Google Apps 脚本挂钩
- c# - 使用@Html.ActionLink 将参数传递给Controller
- r - 'data' 必须是二维的(例如数据框或矩阵)
- keyboard-shortcuts - 在 iTerm2 中执行 shell 命令的键盘快捷键