2012-01-22 50 views
2

我已经梳理了网络,试图让我对以下方面的一些理解,因为它涉及到下面的对象。 “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))时我称之为功能。有了上述数据,我需要通过点击我的表格的其中一个标题进行排序 - 这将涉及到排序字符串和数字值。有关如何对“分数”数组中的嵌套值进行排序的任何想法?我将如何去排序通过名字/姓氏?

+0

请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort。 “a”和“b”是指某种可分类对的元素。排序算法对数组中的每个项目使用此规则。 –

回答

0

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

要将对象按字母顺序按姓氏排序,你会需要像这样的一个排序功能:

取出.toLowerCase()如果你希望你的排序是区分大小写。要排序的东西,如“姓氏,名字”你可以使用以下行来代替:

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将默认使用数字排序顺序。

+0

你真棒,但是如果我没有传递元素作为参数,函数在哪里获取元素来确定它们的排序顺序?还是我? – jjhenry

+0

您正在调用Array的'sort'方法,'students.sort(...)',并将它传递给排序函数。然后Array的'sort'方法接受你的函数并在必要时将它应用到它的元素。 –

+0

非常感谢。我正在做的是创建一个动态TABLE,我需要通过表头进行排序的能力。我在排序嵌套数组中的数据时遇到困难。我想通过嵌套的第一个值,嵌套的第二个值等排序数组...任何想法? 得分:[99,190,188,185,160,88,89,76] 99将是第一列,190将是第二列等等... – jjhenry

0

.sort需要回拨。然后它会从数组中选择两个元素并将它们传递给回调函数。回调函数返回哪个元素更大。 .sort根据该信息重新排列阵列中的两个元素。然后它接受另外两个元素并将它们传递给回调函数。冲洗,重复,直到阵列排序。

ab只是“an element”和“another element”的变量。给他们打电话,只要你喜欢命名没有意义。