在JavaScript中对嵌套数组进行排序

时间:2011-10-12 08:55:08

标签: javascript sorting

对于如何解决这类问题,我完全陷入困境 JS对象

o={"items":[  
    {"name":"Name 1","types":[  
        {"type":"Type 4","subtype":"Sub a"}
    ]},  
    {"name":"Name 2","types":[]},  
    {"name":"Name 3","types":[  
        {"type":"Type 1","subtype":"Sub x"}  
    ]}  
]}

我正在尝试按类型排序,类似于o.sortByType();

Array.prototype.sortByType = function(){
    this.sort(function(a,b) {
        var ap = a[types][type], bp = b[types][type];
        if(ap!=undefined||bp!=undefined){
            if (ap < bp) {return -1;}
            if (ap > bp) {return 1;}
        }else{
            return 0;
        }
    })
return this;
}

我正在尝试重新排序数组:
项目:
名称3,
名称1,
姓名2

此处使用的排序函数适用于项目对象的任何非嵌套属性 如果我在排序中使用[类型] [类型],则返回错误,未定义“类型” 如果我使用a.types.type,它只返回未修改的数组 就像我说的那样,我非常困难,任何帮助或指示都会非常感激。

1 个答案:

答案 0 :(得分:1)

我假设您要使用类型作为键对数组进行排序。这是解决方案:

o.items.sort(function(a,b){
    if(a.types.length == 0 || b.types.length == 0) {
        return b.types.length - a.types.length;
    }
    return a.types[0].type.localeCompare(b.types[0].type);
});

这是example