What would i need to put in the SortIP
function to make the custom sort function sort the array by the last digit of the IP number. This doesn't work.
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);
expected array order:
You're comparing the wrong values. Try this:
function SortIP(a, b) {
return a[1][3] - b[1][3];
}
You're almost there
just replace
return a[0][3] - b[0][3];
with
return a[1][3] - b[1][3];
and you're done.
Why? Because the IP is the second (Index=1) cell of each array.
The values sent to the sort handler are values of the array being sorted.
Since this is a bubble sort, you have to return 0 if the items are the same, 1 if a > b, and -1 if b > a;
function SortIP(a, b)
{
if ( a[1][3] == b[1][3] ) return 0;
return ( a[1][3] > b[1][3] ) ? 1 : -1;
}
change your sort function to:
function SortIP(a, b)
{
return a[1][3] - b[1][3];
}
If you want to sort by the complete address, it might be a good idea to write a thin wrapper for the array containing the bytes:
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]; });
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.