在JavaScript中对字符串和布尔值排序数组

Chi*_*hin 0 javascript sorting

我很难让这种工作。当前总是优先于名称。我可以根据当前或名称的值对它进行排序,但不能同时对两者进行排序。

我的数组看起来像这样。

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

这是排序功能。

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();
                        }
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

Zet*_*eta 5

您缺少return

if(left.current===right.current) {
    return sort_by_val();
}
Run Code Online (Sandbox Code Playgroud)

否则,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;
    }
}
Run Code Online (Sandbox Code Playgroud)