我使用https://www.kryogenix.org/code/browser/sorttable对表格中的列进行排序。这可以很好地使用任何插件左右。
但是一列是IP地址,而且这个脚本没有为IP地址排序列。 例如。如果我只能在下面排序IP地址。
10.132.14.12
10.132.14.11
10.132.14.14
10.132.14.9
请注意,此处生成的IP地址是自动的。所以我不知道我将收到什么范围的IP地址。
答案 0 :(得分:6)
如果有人在搜索后最终出现在这里,只需在这里添加我的解决方案:
arrayOfIps
.sort((a, b) => {
const num1 = Number(a.split(".").map((num) => (`000${num}`).slice(-3) ).join(""));
const num2 = Number(b.split(".").map((num) => (`000${num}`).slice(-3) ).join(""));
return num1-num2;
});
如果您正在使用新版本的nodejs,也可以使用padStart代替slice。
答案 1 :(得分:1)
此函数对 IPv4 地址进行数字排序:
function compareIPAddresses(a, b) {
const numA = Number(
a.split('.')
.map((num, idx) => num * Math.pow(2, (3 - idx) * 8))
.reduce((a, v) => ((a += v), a), 0)
);
const numB = Number(
b.split('.')
.map((num, idx) => num * Math.pow(2, (3 - idx) * 8))
.reduce((a, v) => ((a += v), a), 0)
);
return numA - numB;
}
const ipAddresses = [
'10.132.14.12',
'10.132.14.11',
'10.132.14.14',
'10.132.14.9',
];
const sorted = ipAddresses.sort(compareIPAddresses);
console.log(sorted);
答案 2 :(得分:0)
let sortedIpArr = ipArr.sort((a, b) =>{
return a.split('.')[0] - b.split('.')[0] || a.split('.')[1] - b.split('.')[1] || a.split('.')[2] - b.split('.')[2] || a.split('.')[3] - b.split('.')[3]
});
console.log("sorted ip arr: ", sortedIpArr);
答案 3 :(得分:0)
要对IP地址值列表进行排序,可以将其转换为数字表达式。下一步是按升序对数值列表进行排序。
对于大量IP,这比以前提出的解析和转换字符串和模板要快。
答案 4 :(得分:0)
Vasanth's answer 的 DRY 版本。
const makeIpNumber = (ip) => Number(
ip.split('.')
.map((subString) => (`00${subString}`).slice(-3))
.join('')
);
arrayOfIps.sort((a, b) => makeIpNumber(a) - makeIpNumber(b));