我已经梳理了网络,试图让自己了解以下内容与下面的对象相关的内容。 “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)
)。有了上面的数据,我需要通过点击我的表的一个标题进行排序 - 这将涉及排序字符串和数字值。关于如何对“得分”数组中的嵌套值进行排序的任何想法?我如何通过姓/名进行排序?
答案 0 :(得分:0)
数组的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()
。要对“姓氏,名字”进行排序,您可以使用以下行:
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
将使用数字排序顺序。
答案 1 :(得分:0)
.sort
接受回调。然后它将从数组中选取两个元素并将它们传递给回调函数。回调函数返回哪个元素更大。 .sort
根据该信息重新排列数组中的两个元素。然后它需要两个其他元素并将它们传递给回调。冲洗,重复直至阵列分类。
a
和b
只是“一个元素”和“另一个元素”的变量。不管你喜欢什么,都可以打命名没有意义。