2017-02-28 40 views
0

这个问题是不同于者指出,因为我想通过一个字符串,然后一个数字和字符串进行排序等由多个(混合数字和字符串)的JavaScript类型的数组字段

我一直打算关闭的

javascript sort array by multiple (number) fields

我已经将我的数据如下:

function GetStudentList(){ 
    var sl = [ 
    { 
      "ClassOrder": 1, 
      "LastName": "Blow", 
      "FirstName": "Joe", 
      "Class": "170-2" 
    }, 
    { 
      "ClassOrder": 2, 
      "LastName": "Jane", 
      "FirstName": "Sally", 
      "Class": "170-1" 
    }, 
    { 
      "ClassOrder": 1, 
      "LastName": "Belmont", 
      "FirstName": "John", 
      "Class": "170-1" 
    } 
] 
return(sl); 
} 

然后我打电话的代码:

var selectedStudents = GetStudentList(); 
selectedStudents.sort(function(a,b){ 
    return a.LastName - b,LastName; 
}; 

它似乎工作时,我在浏览器中跟踪它,但只要我离开sort函数,selectedStudents数组恢复。它似乎工作,但只有ClassOrder数据。然后,如果我尝试按ClassOrder和THEN姓氏进行排序,则不会再有效。

return a.ClassOrder - b.ClassOrder || a.LastName - b.LastName 
+0

您不能'-'比较字符串,即仅适用于数字。 – Bergi

回答

-1

您不应该将字符串与-进行比较。相反,使用<>分别进行降序或升序排序。

let sl = [ 
 
    { 
 
    "ClassOrder": 1, 
 
    "LastName": "Blow", 
 
    "FirstName": "Joe", 
 
    "Class": "170-2" 
 
    }, 
 
    { 
 
    "ClassOrder": 2, 
 
    "LastName": "Jane", 
 
    "FirstName": "Sally", 
 
    "Class": "170-1" 
 
    }, 
 
    { 
 
    "ClassOrder": 1, 
 
    "LastName": "Belmont", 
 
    "FirstName": "John", 
 
    "Class": "170-1" 
 
    } 
 
]; 
 

 
sl.sort((a, b) => { 
 
    if (a.LastName > b.LastName) return 1; 
 
    else if (a.LastName < b.LastName) return -1; 
 
    return 0; 
 
}); 
 

 
console.log(sl);

+1

(http://stackoverflow.com/q/24080785/1048572) – Bergi

+0

这很有用,但为什么我的编辑器(即Dreamweaver和Visual Studio突出显示“=>”,并说这是一个语法错误? – Keltanis

+0

@Bergi你是对的,我的歉意 – Gavin

相关问题