我很难让这种方式起作用。 当前总是优先于名称。 我可以让它对当前或名称的值进行排序,但不能同时对它们进行排序。
我的数组看起来像这样。
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();
}
}
}
}
答案 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