js对象中按照字母多少例如var obj={'a','baaa','aba','a','aaaaa'}来排序

新手上路,请多包涵

var obj={'a','baaa','aba','a','aaaaa'}
怎样按照a的数量从大排到小

阅读 1.7k
3 个回答

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}) // 从大到小

兄弟,你的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"]
**/

首先,你的对象定义都是错误的吧?是否应该是数组?
其次对象中key是无序的(程序实现中不保证对象属性存储有序,你只能先提取key,为数组,再对这个数组排序,然后依据数组输出元素信息来保证有序输出。)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题