javascript - 自定义排序函数如何用于多维数组

标签 javascript arrays json multidimensional-array sorting

我已经梳理了网络,试图让自己对以下与以下对象相关的含义有所了解。 “a”和“b”是什么意思?为什么它很重要?

students.sort(function(a, b){
    return a.fn-b.ln
})

var students = [{
    fn : "Stone",
    ln : "Carpenter",
    scores : [61,99,73,68,80,62,176,78]
},
{
    fn : "Samson",
    ln : "Sears",
    scores : [68,193,91,190,95,65,171,75]
},
{
    fn : "Quin",
    ln : "Morton",
    scores : [79,95,161,92,182,163,198,182]
},
{
    fn : "Qunitessa",
    ln : "Hardy",
    scores : [99,65,75,69,77,67,86,78]
},
{
    fn : "Ashley",
    ln : "England",
    scores : [147,70,81,64,148,71,70,63]
},
{
    fn : "Thaddeus",
    ln : "Hutchinson",
    scores : [99,190,188,185,160,88,89,76]
},
{
    fn : "Yeo",
    ln : "Hayes",
    scores : [88,64,199,165,198,76,74,81]
},
{
    fn : "Rylee",
    ln : "Larson",
    scores : [71,126,63,71,168,173,175,88]
}
];

我知道匿名函数将返回值 -1,0,1,但是参数 ab 的意义是什么,因为我不会在我调用该函数时传递任何值(例如 employees.sort(a.something, b.something))。对于上述数据,我需要通过单击表格的标题之一进行排序——这将涉及对字符串和数字值进行排序。关于如何对“分数”数组中的嵌套值进行排序的任何想法?我将如何通过名字/姓氏进行排序?

最佳答案

数组的 sort 方法将使用您的排序函数,并在必要时应用它来比较两个元素并确定它们的排序顺序。 ab 将是您正在排序的数组的两个元素。

要按姓氏字母顺序对对象进行排序,您将需要一个像这样的排序函数:

function lastNameCompare(a, b) {
    var sortFieldA = a.ln.toLowerCase();
    var sortFieldB = b.ln.toLowerCase();
    return sortFieldA == sortFieldB ? 0 : (sortFieldA < sortFieldB ? -1 : 1);
}

如果您希望排序区分大小写,请删除 .toLowerCase()。要对诸如“last name, first name”之类的内容进行排序,您可以改用以下行:

    var sortFieldA = (a.ln + ", " + a.fn).toLowerCase();
    var sortFieldB = (b.ln + ", " + b.fn).toLowerCase();

要同时对数据中的分数进行排序,您需要对数据集的每个条目执行排序:

for (var i = 0; i < students.length; i++) {
    var student = students[i];
    student.scores.sort();
}

请注意,在这种情况下您不需要显式排序函数,因为 sort 将默认使用数字排序顺序。

关于javascript - 自定义排序函数如何用于多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960533/

相关文章:

javascript - 水平 div 图像滚动动态宽度

c# - 创建值为 0,1,2,3... 长度的 c# int[]

json - 将 JSON 字符串解码为常量

c# - 如何确定一个 JSON 对象是否只包含一个特定的键?

java - 是否可以更改随机数的范围?

javascript - 使用 AngularJS 将隐藏值传递给 JSON

javascript - 在 html5 中使用 javascript/jQuery 制作类似 Soundcoud Player 的波形

javascript - 如何在用户放大和缩小页面时保持 <div> 的大小不变?

Javascript,查找嵌套属性(如果存在)

ios - 数组有追加,但里面没有值