javascript - 如何根据值对对象进行排序?
问题描述
我有这样的数据:
export const keyOrders: {} = {
"aa": { active: true, order: 0, val: "aaa" },
"bb": { active: true, order: 6, val: "bbb" },
"cc": { active: true, order: 2, val: "ccc" },
"dd": { active: true, order: 7, val: "ddd" },
"ee": { active: false, order: 4, val: "eee" },
"ff": { active: true, order: 5, val: "fff" }
};
如果 active 仅为 true 并根据 order 值排序,我将尝试推送到数组。
到目前为止,我已经尝试过了
this.pdfKeys = Object.entries(this.dashboardElementsConfig)
.filter(([key, value]) => {
return value["active"];
})
.map(([key, value]) => {
return key;
})
我不确定如何根据给定的订单号进行排序。
解决方案
您可以按照以下步骤操作。
- 使用获取键数组
Object.keys()
- 使用
filter()
kets 的所有物品active:true
- 用于
sort()
按升序或降序对过滤后的数组进行排序。 - 最后用于
map()
将每个值转换key
为.val
您可以首先使用所有active:true
对象,然后将map()
每个对象都使用key
到所需的值
let obj = {
"aa": { active: true, order: 0, val: "aaa" },
"bb": { active: true, order: 6, val: "bbb" },
"cc": { active: true, order: 2, val: "ccc" },
"dd": { active: true, order: 7, val: "ddd" },
"ee": { active: false, order: 4, val: "eee" },
"ff": { active: true, order: 5, val: "fff" }
};
let asc = Object.keys(obj)
.filter(x => obj[x].active)
.sort((a,b) => obj[a].order - obj[b].order)
.map(x => obj[x].val);
let dec = Object.keys(obj)
.filter(x => obj[x].active)
.sort((a,b) => obj[b].order - obj[a].order)
.map(x => obj[x].val);
console.log(asc)
console.log(dec)
推荐阅读
- python - 我是否必须再次预处理新数据才能预测模型?
- javascript - Javascript:encodeURIComponent 返回在键盘中键入的值和从剪贴板粘贴的值之间的不同值
- android - 禁用 Android TV 上的默认焦点行为
- azure - 逻辑应用:使用另一个帐户发送邮件
- javascript - 将 knex 与 es6 模块一起使用
- git - Git 存储库:文件未反映最新提交
- javascript - 如何在 vue/nuxt 中导入几十个 svg 文件
- java - 为什么我的代码中不断出现 arrayIndexOutOfBound 异常错误
- nginx - Nginx、nuxt.js 静态生成模式和尾部斜杠重定向
- python - 使用 Python/boto3 更新 S3 存储桶中的静态网页