我已经梳理了网络,试图让自己对以下与以下对象相关的含义有所了解。 “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,但是参数 a
和 b
的意义是什么,因为我不会在我调用该函数时传递任何值(例如 employees.sort(a.something, b.something)
)。对于上述数据,我需要通过单击表格的标题之一进行排序——这将涉及对字符串和数字值进行排序。关于如何对“分数”数组中的嵌套值进行排序的任何想法?我将如何通过名字/姓氏进行排序?
最佳答案
数组的 sort
方法将使用您的排序函数,并在必要时应用它来比较两个元素并确定它们的排序顺序。 a
和 b
将是您正在排序的数组的两个元素。
要按姓氏字母顺序对对象进行排序,您将需要一个像这样的排序函数:
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/