javascript - 对对象进行排序,使最大的嵌套数组排在前面

标签 javascript lodash

这里是新手 Javascript 问题:我有一个包含像这样的数组的对象

const obj = {
  'red': [ 'a', 'b', 'c'],
  'blue': [ 'a' ],
  'green': [ 'a', 'b', 'c', 'd', 'e' ]
}

我想对我的对象进行排序,以便具有最大数组的属性排在前面

obj = {
  'green': [ 'a', 'b', 'c', 'd', 'e' ],
  'red': [ 'a', 'b', 'c'],
  'blue': [ 'a' ]
}

有没有一种简单的单行或 lodash 方法可以实现这一目标?

最佳答案

将对象转换为数组。根据您的需要对数组进行排序,然后从该数组重新构建一个对象,如下所示:

const obj = {
  'red': ['a', 'b', 'c'],
  'blue': ['a'],
  'green': ['a', 'b', 'c', 'd', 'e']
};

const ordered = {};
const asArray = Object.keys(obj).map(key => ({
  key,
  arr: obj[key]
})); // create an array from the object


asArray.sort((a, b) => b.arr.length - a.arr.length); // sor the array so the array has bigger length should come first

asArray.forEach(r => {
  ordered[r.key] = r.arr
}); // re construct as new object
console.log(ordered);

关于javascript - 对对象进行排序,使最大的嵌套数组排在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222361/

相关文章:

javascript - 使用 crossfilter.js 进行多维分组和排序

javascript - 在 JS 中从数组中选择项目的副本

javascript - 如何比较两个大对象数组的身份

javascript - 无法在 Vue props 验证器中使用导入的对象

javascript - 在_.invoke源代码中,args的作用是什么?

JavaScript 返回数组长度为 0,但在控制台中长度正确

javascript - 以编程方式格式化谷歌图表

javascript - 使用 .map 将数量转换为百分比

javascript - 单击时更改按钮的显示图像

javascript - 在 <md-tab-content> 标签下使用 ui-view