我想使用第5列(点)对此数组进行排序。
var table=[
["teamA",6,2,0,2,6],
["teamB",6,1,1,2,4],
["teamC",6,2,1,1,7]];
这是一个带有Pld,W,D,L和Pts列的足球联赛表。我打算稍后添加目标差异。
我尝试了以下代码:
console.log(table.sort(compare));
function compare( a, b ) {
if (table[a][5]<table[b][5]){
return -1;
}
if (table[a][5]>table[b][5]){
return 1;
}
return 0;
}
不幸的是,代码甚至没有运行。我得到错误
cannot read property '5' of undefined.
答案 0 :(得分:1)
您无需索引到表中。迭代通过将每一行传递到函数中(而不是行索引)来实现,只需索引所需的列即可。您可以使用-
代替if
来获得相同的效果:
var table = [
["teamA", 6, 2, 0, 2, 6],
["teamB", 6, 1, 1, 2, 4],
["teamC", 6, 2, 1, 1, 7]
];
console.log(table.sort(compare));
function compare(a, b) {
return a[5] - b[5]
}
答案 1 :(得分:0)
您的compare方法将接收数组中的实际对象,而不是这些对象的索引。因此,将您的比较方法重构为:
function compare( a, b ) {
if (a[5] < b[5]){
return -1;
}
if (a[5]>n[5]){
return 1;
}
return 0;
}
这可以进一步简化为:
function compare( a, b ) {
return a[5] - b[5];
}