Сортировка массивов по значению подмассива в javascript - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть массив массивов в javascript со значением расстояния (целое, целое число). Я пытаюсь их отсортировать, но, похоже, не могу заставить это работать.

nodes = [[{distance:15}],[{distance:123}],[{distance:2}]];

function sortNodes(a,b) {
   if (a.distance < b.distance)
     return -1;
   if (a.distance > b.distance)
     return 1;
     return 0;
   }
console.log(nodes.slice(0).sort(sortNodes));

Нужно какое-то руководство о том, что здесь происходит и почему.

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Функция компаратора, переданная в функцию sort(), принимает значения из массива.

Итак, как вы упомянули, у вас есть массив массивов , аргументами функции компаратора будут массивы.

Таким образом, вы можете использовать a[0] и b[0] для доступа к объектам.

Вот код:

nodes = [[{ distance: 15 }], [{ distance: 123 }], [{ distance: 2 }]];

function sortNodes(a, b) {
    if (a[0].distance < b[0].distance) return -1;
    if (a[0].distance > b[0].distance) return 1;
    return 0;
}
console.log(nodes.slice(0).sort(sortNodes));

Вот хороший пример деструктуризации:

nodes = [[{ distance: 15 }], [{ distance: 123 }], [{ distance: 2 }]];

function sortNodes([a], [b]) {
    return a.distance - b.distance
}
console.log(nodes.slice(0).sort(sortNodes));
0 голосов
/ 03 сентября 2018

Это также будет работать:

nodes = [[{distance:15}],[{distance:123}],[{distance:2}]];

function sortNodes(a,b) {
    return a[0].distance > b[0].distance;
}
console.log(nodes.slice(0).sort(sortNodes));
0 голосов
/ 03 сентября 2018

Вам нужно сделать return a[0].distance - b[0].distance; это потому что:

  1. distance является целочисленным типом, поэтому вам не нужно сравнивать его и возвращать 1, -1 или 0 с помощью оператора сравнения.
  2. У вас есть массив массивов с одним объектом внутри вложенного массива, поэтому используйте [0], чтобы получить этот объект внутри параметра a и b.

var nodes = [
  [{
    distance: 15
  }],
  [{
    distance: 123
  }],
  [{
    distance: 2
  }]
];

function sortNodes(a, b) {
 return a[0].distance - b[0].distance;
}
console.log(nodes.slice(0).sort(sortNodes));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...