为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2023-04-01 17:26:57
我有一个键(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': [],}
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您正在寻找的很可能是:

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

但是,上面代码的输出是一个由对象的可枚举属性 [key, value] 对组成的数组。无法实现在对象本身内部对对象的键进行排序。


查看完整回答
反对 回复 2023-04-01
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

假设所有键都是整数


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);


查看完整回答
反对 回复 2023-04-01
?
侃侃无极

TA贡献2051条经验 获得超10个赞

let obj = {

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

  'ABC12': [],

  'CAA11': [3,5],

  '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++){

  tempObj[entries[i][0]] = entries[i][1]; 

}

obj = tempObj;

console.log(obj);


查看完整回答
反对 回复 2023-04-01
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信