高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > 【JavaScript】js对象进行排序(对象转数组 对象转对象)

【JavaScript】js对象进行排序(对象转数组 对象转对象)

时间:2024-01-12 06:42:02

相关推荐

【JavaScript】js对象进行排序(对象转数组 对象转对象)

【JavaScript】js对象进行排序(对象转数组,对象转对象)

1. 问题描述

需求是要排序一个对象

aaa = {"2_4":{"a":1,"b":2},"2_16":{"a":1,"b":2},"2_12":{"a":1,"b":2},"2_8":{"a":1,"b":2}}

2. 最佳答案(详细解答可以往下看)

let aaa = {"2_4":{"a":2,"b":4},"2_16":{"a":2,"b":16},"2_12":{"a":2,"b":12},"2_8":{"a":2,"b":8}}let aa = Object.keys(aaa).sort((a,b)=>{a_list = a.split("_");b_list = b.split("_");return a_list[0]==b_list[0]?a_list[1]-b_list[1]:a_list[0]-b_list[0]// return aaa[a].sort-aaa[b].sort;})let arr = Object();for (var sortIndex in aa) {arr[aa[sortIndex]] = aaa[aa[sortIndex]]}console.log(arr);

3. 详细介绍

对象按照key排序对象按照value排序

方法1:象按照key排序

Object.keys(aaa).sort((a,b){// 代码逻辑,根据keys排序,如果a>b的排序使用a-b// 这里的a,b就会根据return返回排序,如果a-b返回true就是a大b小,所以a在后b在前return a-b})

如果有更复杂的代码可以使用代码逻辑,比如这个文章的开头的举例

它的key就是字符串2_4 这样的,但是2_8却大于2_16

这个时候我们就需要使用更复杂的逻辑进行排序,请看如下代码

# 方法1:把对象转为数组let aaa = {"2_4":{"a":2,"b":4},"2_16":{"a":2,"b":16},"2_12":{"a":2,"b":12},"2_8":{"a":2,"b":8}}let aa = Object.keys(aaa).sort((a,b)=>{a_list = a.split("_");b_list = b.split("_");return a_list[0]==b_list[0]?a_list[1]-b_list[1]:a_list[0]-b_list[0]// return aaa[a].sort-aaa[b].sort;})// 把排序好的结果放在新的数组中let arr = [];for (var sortIndex in aa) {arr.push(aaa[aa[sortIndex]])}console.log(arr);# 方法2:下面使用数组生成我们想要的排好序的对象let aaa = {"2_4":{"a":2,"b":4},"2_16":{"a":2,"b":16},"2_12":{"a":2,"b":12},"2_8":{"a":2,"b":8}}let aa = Object.keys(aaa).sort((a,b)=>{a_list = a.split("_");b_list = b.split("_");return a_list[0]==b_list[0]?a_list[1]-b_list[1]:a_list[0]-b_list[0]// return aaa[a].sort-aaa[b].sort;})let arr = Object();for (var sortIndex in aa) {arr[aa[sortIndex]] = aaa[aa[sortIndex]]}console.log(arr);

方法2:

使用 Object.values(aaa).sort

let aaa = {"2_4":{"cpu":2,"ram":4},"2_16":{"cpu":2,"ram":16},"2_12":{"cpu":2,"ram":12},"2_8":{"cpu":2,"ram":8}}let aa = Object.values(aaa).sort((a,b)=>{return a["cpu"]==b["cpu"]?a["ram"]-b["ram"]:a["cpu"]-b["cpu"]})console.log(aa);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。