3 回答
TA贡献1876条经验 获得超7个赞
obj应该是个数组吧
var obj =['a','baaa','aba','a','aaaaa']
obj.sort(function(a, b) { return a.length > b.length}) // 从小到大
obj.sort(function(a, b) { return a.length < b.length}) // 从大到小
TA贡献1818条经验 获得超7个赞
兄弟,你的obj写法有问题吧;
正常的对象写法应该 {key: value}吧;你哪种应该是数组比较合适var obj=['a','baaa','aba','a','aaaaa']
排序思路
获取obj的key数组
对key进行排序
更具key赋值到新的obj上
代码
function ksort(arr) {
if (arr.length <= 1) {
return arr;
}
const pivotIndex=Math.floor(arr.length / 2);
const pivot = arr.splice(pivotIndex, 1)[0];
const pivotLength = pivot.match(/a/ig).length
let left = [];
let right = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i].match(/a/ig).length <= pivotLength){
right.push(arr[i]);
} else {
left.push(arr[i]);
}
}
return ksort(left).concat([pivot], ksort(right));
}
function sortObj(obj){
if (obj instanceof Array) {
return ksort(obj);
} else {
let arrList = Object.keys(obj);
const sortList = ksort(arrList);
let newObj = {};
sortList.forEach((value) => {
newObj[value] = obj[value]
})
return newObj;
}
}
例子
//obj是对象
let obj = {aaaaa: 1, baaa: 2, aba: 3, a: 4, aaaaaaaaaaaaa: 5}
obj = sortObj(obj)
/**
*结果
*{aaaaaaaaaaaaa: 5, aaaaa: 1, baaa: 2, aba: 3, a: 4}
**/
//obj是数组
let obj = ['a','baaa','aba','a','aaaaa']
obj = ksort(obj)
/**
*结果
*["aaaaa", "baaa", "aba", "a", "a"]
**/
TA贡献1824条经验 获得超8个赞
首先,你的对象定义都是错误的吧?是否应该是数组?
其次对象中key是无序的(程序实现中不保证对象属性存储有序,你只能先提取key,为数组,再对这个数组排序,然后依据数组输出元素信息来保证有序输出。)
添加回答
举报