Сортировка 2D массива по числовому элементу - PullRequest
0 голосов
/ 06 мая 2019

Я бы хотел отсортировать этот массив, используя столбец 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.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Вам не нужно индексировать в таблицу.Итерация делает это, передавая каждую строку в функцию (не индекс строки), просто индексируйте столбец, который вы хотите.Вы можете использовать - вместо 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]

}
0 голосов
/ 06 мая 2019

Ваш метод сравнения будет получать реальные объекты в массиве, а не их индекс. Итак, измените ваш метод сравнения на этот:

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...