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

Javascript 需要使用js对IP地址进行排序,javascript,Javascript,我正在使用它对表中的列进行排序。这在不使用任何插件的情况下非常有效 但有一列是IP地址,此脚本不会对该列进行IP地址排序。 要是我能在下面为IP地址排序就好了 10.132.14.12 10.132.14.11 10.132.14.14 10.132.14.9 请注意,这里生成的IP地址是自动的。因此,我无法知道我将收到的IP地址的范围 如果有人在搜索后出现在此处,请在此处添加我的解决方案: arrayOfIps .sort((a, b) => { const num1

我正在使用它对表中的列进行排序。这在不使用任何插件的情况下非常有效

但有一列是IP地址,此脚本不会对该列进行IP地址排序。 要是我能在下面为IP地址排序就好了

10.132.14.12
10.132.14.11
10.132.14.14
10.132.14.9

请注意,这里生成的IP地址是自动的。因此,我无法知道我将收到的IP地址的范围

如果有人在搜索后出现在此处,请在此处添加我的解决方案:

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。

如果有人在搜索后出现在此处,请在此处添加我的解决方案:

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

如果您使用的是较新版本的nodejs,也可以使用padStart而不是slice。

要对IP地址值列表进行排序,可以将它们转换为数字表达式。下一步是按升序对数值列表进行排序

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);
对于大量IP,这比以前建议的解析和转换字符串和模板更快


查看:

要对IP地址值列表进行排序,可以将它们转换为数字表达式。下一步是按升序对数值列表进行排序

对于大量IP,这比以前建议的解析和转换字符串和模板更快


请看:

此函数用于对IPv4地址进行数字排序:

函数比较垫(a,b){
常数numA=数字(
a、 拆分('.'))
.map((num,idx)=>num*Math.pow(2,(3-idx)*8))
.减少((a,v)=>(a+=v,a),0)
);
常数numB=数字(
b、 拆分('.'))
.map((num,idx)=>num*Math.pow(2,(3-idx)*8))
.减少((a,v)=>(a+=v,a),0)
);
返回numA-numB;
}
常量IP地址=[
'10.132.14.12',
'10.132.14.11',
'10.132.14.14',
'10.132.14.9',
];
const sorted=ipaddress.sort(compareIPAddresses);

控制台日志(已排序)此函数对IPv4地址进行数字排序:

函数比较垫(a,b){
常数numA=数字(
a、 拆分('.'))
.map((num,idx)=>num*Math.pow(2,(3-idx)*8))
.减少((a,v)=>(a+=v,a),0)
);
常数numB=数字(
b、 拆分('.'))
.map((num,idx)=>num*Math.pow(2,(3-idx)*8))
.减少((a,v)=>(a+=v,a),0)
);
返回numA-numB;
}
常量IP地址=[
'10.132.14.12',
'10.132.14.11',
'10.132.14.14',
'10.132.14.9',
];
const sorted=ipaddress.sort(compareIPAddresses);

控制台日志(已排序)你试过什么?您是否尝试过使用自定义排序函数?您是否使用了库的API。您需要定义“自定义排序键”,包括您的代码。如果您甚至不包括它,我们将无法帮助您。是的,但它使用sorttable_customkey属性,并在此基础上进行排序。在我的情况下,我不知道会出现什么IP地址。这些IP地址是在报告中自动生成的。@初学者,我刚刚在我的表中使用过。您尝试过什么?您是否尝试过使用自定义排序函数?您是否使用了库的API。您需要定义“自定义排序键”,包括您的代码。如果您甚至不包括它,我们将无法帮助您。是的,但它使用sorttable_customkey属性,并在此基础上进行排序。在我的情况下,我不知道会出现什么IP地址。这些IP地址是在报告中自动生成的。@初学者,我只是在我的表中使用的。我只是在寻找这个。你两天前刚刚回答了这个问题。谢谢我只是在找这个。你两天前刚刚回答了这个问题。谢谢看起来很好,我刚刚制作了一个可运行的片段。看起来很好,我刚刚制作了一个可运行的片段。