如何将数组对象按elements长度降序排序?当前仅支持升序
实现按elements数组长度降序排序
嘿,这事儿超容易搞定!你现在已经能实现升序排序了,只需要微调一下排序函数的返回值逻辑,就能切换成降序(让elements最长的分类排在最前面)。
核心思路
JavaScript的Array.sort()方法里,排序函数的返回值直接决定元素的排列顺序:
- 升序排序时我们用
a.elements.length - b.elements.length—— 当a的elements更短,返回负数,a就排在b前面 - 要改成降序,只需要把两者调换位置,用
b.elements.length - a.elements.length就行:当b的elements更长,返回正数,b就会被排到a前面,最终实现最长的数组排在首位
具体代码示例
假设你的原始数据是这样的:
const data = { category: [ { name: "Cat1", elements: [ { name: "name1", id: 1 } ] }, { name: "Cat2", elements: [ { name: "name2", id: 2 }, { name: "name3", id: 3 }, { name: "name4", id: 4 } ] }, { name: "Cat3", elements: [ { name: "name5", id: 5 }, { name: "name6", id: 6 } ] } ] };
要实现降序排序,只需要对data.category调用sort方法,传入调整后的排序函数:
// 降序排序:elements长度从长到短排列 data.category.sort((a, b) => b.elements.length - a.elements.length);
执行后的预期结果
排序后的data.category会变成:
[ { name: "Cat2", elements: [ { name: "name2", id: 2 }, { name: "name3", id: 3 }, { name: "name4", id: 4 } ] }, { name: "Cat3", elements: [ { name: "name5", id: 5 }, { name: "name6", id: 6 } ] }, { name: "Cat1", elements: [ { name: "name1", id: 1 } ] } ]
完全符合你要的“最长elements数组的对象排在首位”的需求~
内容的提问来源于stack exchange,提问作者Mr world wide
相关产品推荐
相关产品推荐

