在字符串上排序数组,在​​javascript中排序布尔值

时间:2013-04-24 05:13:47

标签: javascript sorting

我很难让这种方式起作用。 当前总是优先于名称。 我可以让它对当前或名称的值进行排序,但不能同时对它们进行排序。

我的数组看起来像这样。

var arr = [{current:true, name:"A name"},
           {name:"A name"}, {name:"B name"},
           {current:true, name:"B name"}];
arr.sort(sort_me)

这是排序功能。

var sort_me = function(left, right){
                var value = "name";
                var sort_by_val = function(){
                    return left[value] == right[value] ? 0 : (left[value] < right[value] ? -1 : 1);
                }
                if(left.current===right.current) {
                    sort_by_val();
                }else{
                    if(left.current===true){
                        return -1;
                    }else{
                        if(right.current===true){
                            return 1;
                        }else{
                        sort_by_val();
                        }
                    }
                }
            }

2 个答案:

答案 0 :(得分:5)

您错过了return

if(left.current===right.current) {
    return sort_by_val();
}

如果同时设置undefined,则返回值为current

var sort_me = function(left, right){
    var nameorder = left.name === right.name ? 0 : (left.name < right.name ? -1 : 1);
    if(
        (left.current && right.current) || 
        (!left.current && !right.current)
    ) {
        return nameorder;
    } else if(left.current) {
        return -1;
    } else {
        return 1;
    }
}

答案 1 :(得分:1)

尝试

var sort_me = function(left, right) {
    var value = "name";
    var sort_by_val = function() {
        return left[value] == right[value] ? 0 : (left[value] < right[value]
                                                  ? -1
                                                  : 1);
    }
    if (left.current === right.current) {
        return sort_by_val(); //missing return
    } else {
        if (left.current === true) {
            return -1;
        } else if (right.current === true) {
            return 1;
        } else {
            return    sort_by_val(); //missing return
        }
    }

}

演示:Fiddle