如何根据javascript中嵌套数组的长度对对象数组进行排序

Tra*_*vis 5 javascript arrays sorting object

我在javascript中有一个对象数组,每个对象都有一个数组:

{
    category: [ 
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        },
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想根据嵌套数组"elements"中的对象数量对数组"类别"进行排序.

例如,排序后,上面的对象可能看起来像这样(降序):

{
    category: [ 
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        },
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        }

    ]
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能使用javascript的sort()方法完成此操作.有什么建议?

提前致谢!

Eli*_*sky 16

sort方法接受一个函数,您可以在其中定义如何比较两个元素.这是相关文档.

compareFunction 指定定义排序顺序的函数.如果省略,则根据每个元素的字符串转换按字典顺序(按字典顺序)对数组进行排序.

如果提供compareFunction,则根据compare函数的返回值对数组元素进行排序.如果a和b是被比较的两个元素,那么:

  • 如果compareFunction(a,b)小于0,则将a排序为低于b的索引.

  • 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对于所有不同的元素进行排序.注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点.

  • 如果compareFunction(a,b)大于0,则将b排序为低于a的索引.

示例代码

var sorted_categories = original.category.sort(function (one, other) {
   //a - b is 
   //   0 when elements are the same
   //  >0 when a > b
   //  <0 when a < b
   return one.elements.length - other.elements.length;
});
Run Code Online (Sandbox Code Playgroud)