Создание собственного массива в функции сортировки массива в Javascript - PullRequest
1 голос
/ 25 июня 2009

Что мне нужно добавить в функцию SortIP, чтобы пользовательская функция сортировки сортировала массив по последней цифре номера IP. Это не работает.

function SortIP(a, b)
{
    return a[0][3] - b[0][3];
}

LAN = new Array
(
    ["ADSL Router", [192, 168, 0, 1]],
    ["Gary's Mac", [192, 168, 0, 15]],
    ["Network Switch", [192, 168, 0, 2]],
    ["Production Email", [192, 168, 0, 60]]
);
LAN.sort(SortIP);

ожидаемый порядок массива:

  1. ADSL Router: 192.168.0.1
  2. Сетевой коммутатор: 192.168.0.2
  3. Mac Гэри: 192.168.0.15
  4. Электронная почта производства: 192.168.0.60

Ответы [ 5 ]

6 голосов
/ 25 июня 2009

Ты почти там

просто заменить

return a[0][3] - b[0][3];

с

return a[1][3] - b[1][3];

и все готово.

Почему? Поскольку IP является второй (Index = 1) ячейкой каждого массива.

6 голосов
/ 25 июня 2009

Вы сравниваете неправильные значения. Попробуйте это:

function SortIP(a, b) {
    return a[1][3] - b[1][3];
}
1 голос
/ 25 июня 2009

Если вы хотите отсортировать по полному адресу, неплохо было бы написать тонкую оболочку для массива, содержащего байты:

function IP4() {
    var ip = Array.prototype.slice.call(arguments, 0, 4);
    ip.toString = IP4.toString;
    ip.valueOf = IP4.valueOf;
    return ip;
}

IP4.toString = function() {
    return this.join('.');
};

IP4.valueOf = function() {
    return (this[0] << 24) | (this[1] << 16) | (this[2] << 8) | this[3];
};

var LAN = [
    ["ADSL Router", IP4(192, 168, 0, 1)],
    ["Gary's Mac", IP4(192, 168, 0, 15)],
    ["Network Switch", IP4(192, 168, 0, 2)],
    ["Production Email", IP4(192, 168, 0, 60)]
];

LAN.sort(function(a, b) { return a[1] - b[1]; });
1 голос
/ 25 июня 2009

изменить функцию сортировки на:

function SortIP(a, b)
{
    return a[1][3] - b[1][3];
}
1 голос
/ 25 июня 2009

Значения, отправляемые в обработчик сортировки, являются значениями сортируемого массива.

Поскольку это пузырьковая сортировка, вы должны вернуть 0, если элементы одинаковы, 1, если a> b, и -1, если b> a;

function SortIP(a, b)
{
    if ( a[1][3] == b[1][3] ) return 0;
    return ( a[1][3] > b[1][3] ) ? 1 : -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...