javascript - 在javascript中按字母顺序对数组及其对象键进行排序

标签 javascript arrays sorting

我有一个以下格式的数组。我已按字母顺序对数组进行排序。但是数组中的每个元素都存在一个子数组。我也想按字母顺序对它们进行排序。

var myObj = [
{
    "name":"John",
    "items": [
        { "id":1, "car":"maruti" },  
        { "id":2, "car":"wolks" },
        { "id":3, "car":"bmw" }            
    ]
},
{
    "name":"Peter",
    "items": [
        { "id":4, "car":"alto" },  
        { "id":5, "car":"swift" },                          
    ]
}];

这是我用来对主数组进行排序的代码。在这里,我想按字母顺序对“items”数组进行排序。

myObj.sort(function(a, b) {
     var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();          
     if (nameA < nameB) {
         return -1
     }
     if (nameA > nameB){
         return 1
     }
     return 0 
}); 

最佳答案

除了对数组中的直接项进行排序之外,在 sort 函数中做任何其他事情都感觉不对 - 我会迭代两次,一次是为了对数组进行排序myObj,并一次对每个 items 属性进行排序。

您还可以使用localeCompare来简化您的代码:

var myObj=[{"name":"John","items":[{"id":1,"car":"maruti"},{"id":2,"car":"wolks"},{"id":3,"car":"bmw"}]},{"name":"Peter","items":[{"id":4,"car":"alto"},{"id":5,"car":"swift"},]}]
myObj.sort((a, b) => a.name.localeCompare(b.name));
myObj.forEach(({ items }) => items.sort((a, b) => a.car.localeCompare(b.car)));
console.log(myObj);

关于javascript - 在javascript中按字母顺序对数组及其对象键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50637659/

相关文章:

javascript - 如何使用 jquery 加载 javascript 模块

java - 返回字符串的方法数组

c - 用 C 读取高分/分析字符串

javascript - 使隐藏的输入字段可见 HTML Javascript

javascript - axios post params没有被发送

javascript - 协作式 JSON 查看器/解析器

perl - 循环变量上缺少 $

c++ - 如何从 C++ 标准推断数组 [] 的优先级高于指针?

python - Torch.sort 和 argsort 在相同元素的情况下随机排序

list - Haskell <<循环>>