需要使用js对IP地址进行排序

时间:2018-02-05 08:46:04

标签: javascript

我使用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地址。

5 个答案:

答案 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,这比以前提出的解析和转换字符串和模板要快。

看看:https://www.npmjs.com/package/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));