在Javascript中的数组排序函数中创建自定义数组

时间:2009-06-25 18:42:14

标签: javascript arrays sorting

我需要在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路由器:192.168.0.1
  2. 网络交换机:192.168.0.2
  3. Gary的Mac:192.168.0.15
  4. 制作电子邮件:192.168.0.60

5 个答案:

答案 0 :(得分:6)

您正在比较错误的值。试试这个:

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

答案 1 :(得分:6)

你快到了

只需替换

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

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

你已经完成了。

为什么呢? 因为IP是每个数组的第二个(Index = 1)单元格。

答案 2 :(得分:1)

发送到排序处理程序的值是要排序的数组的值。

由于这是冒泡排序,如果项目相同,则必须返回0,如果是>则必须返回1 b,如果b> -1,则为-1。一个;

function SortIP(a, b)
{
    if ( a[1][3] == b[1][3] ) return 0;
    return ( a[1][3] > b[1][3] ) ? 1 : -1;
}

答案 3 :(得分:1)

将您的排序功能更改为:

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

答案 4 :(得分:1)

如果要按完整地址排序,为包含字节的数组编写一个瘦包装器可能是个好主意:

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]; });