如何根据值的长度对对象进行排序

我有一个键(str):值(arr)对的对象。


const obj = {

   '1': []

   '2': ['a', 'b'],

   '3': [],

   '4': ['c']

}

我想按每个键在值中的元素数量对其进行排序。


这样就像,


const obj = {

   '2': ['a', 'b'],

   '4': ['c']

   '1': []

   '3': [],

}

经过一番搜索,我尝试了这种语法


const sortable = Object.fromEntries(

    Object.entries(obj).sort(([,a],[,b]) => b.length)

);

但这给了我不确定的。


有什么帮助吗?


编辑


抱歉,键是字符串


更详细的例子


const obj = {

    '1.2.3': [1,2,3,4],

    'ABC12': [],

    'CAA11': [3,5],

    '4.4.1': [1,2,3],

}


const obj = {

    '1.2.3': [1,2,3,4],

    '4.4.1': [1,2,3],

    'CAA11': [3,5],

    'ABC12': [],

}


慕尼黑5688855
浏览 213回答 3
3回答

慕村225694

您正在寻找的很可能是:Object.entries(obj).sort(([, a], [, b]) => b.length - a.length);但是,上面代码的输出是一个由对象的可枚举属性 [key, value] 对组成的数组。无法实现在对象本身内部对对象的键进行排序。

拉丁的传说

假设所有键都是整数Object.keys(obj).sort((a,b)=>a-b).reduce((acc, key)=>((acc[key]=obj[key]), acc),{});返回具有排序键的新对象编辑: 根据值长度(数组长度)排序;Object.keys(obj).sort((a,b)=>obj[b].length - obj[a].length)    .reduce((acc, key)=>((acc[key]=obj[key]), acc),{});const obj = {    '1.2.3': [1,2,3,4],    'ABC12': [],    'CAA11': [3,5],    '4.4.1': [1,2,3],}const res = Object.keys(obj)                  .sort((a,b)=>obj[b].length - obj[a].length)                  .reduce((acc, key)=>((acc[key]=obj[key]), acc),{});console.log(res);

侃侃无极

let obj = {&nbsp; &nbsp;'1.2.3': [1,2,3,4],&nbsp; 'ABC12': [],&nbsp; 'CAA11': [3,5],&nbsp; '4.4.1': [1,2,3],}console.log(obj);let entries = Object.entries(obj).sort((a,b) => { return b[1].length - a[1].length;});let tempObj = {};for(let i = 0; i < entries.length; i++){&nbsp; tempObj[entries[i][0]] = entries[i][1];&nbsp;}obj = tempObj;console.log(obj);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript