我想知道是否可以使用交叉过滤器对ipaddress进行排序?
例如: 我有一组IP:
[{ ip: "10.102.126.1"},{ ip: "10.102.126.2"},{ ip: "10.102.126.3"},{ ip: "10.102.126.4"},{ ip: "10.102.126.5"},{ ip: "10.102.126.6"},{ ip: "10.22.126.1"},{ ip: "20.102.126.1"},{ ip: "20.22.126.1"},{ ip: "100.22.126.1"},{ ip: "200.22.126.1"}]
当我应用交叉过滤器并使用时:
dimension.top(Infinity)
它对字符串进行排序并返回。
输出: 200.22.126.1,20.22.126.1,20.102.126.1,100.22.126.1,10.22.126.1,10.102.126.6,10.102.126.5,10.102.126.4,10.102.126.3,10.102.126.2,10.102。 126.1
现在在这里如何执行IP地址排序?
答案 0 :(得分:1)
有很多方法可以做到这一点,但是我认为用一个由整个IP地址组成的数字进行排序最简单。
由于JavaScript实际上没有整数(只有浮点数),因此让我们按数字的零填充十六进制表示进行排序。 It should be safe to deal with numbers up to 2^53,但对我来说有点冒险。字符串更简单。
请注意,您可以应用任何要生成尺寸键的转换,因此,即使是这样的疯狂操作也应起作用:
display
什么?是的:
现在,键是像block
这样的字符串,crossfilter可以正确地对其进行排序(function ip_to_hex(s) {
return s.split('.').map(i=>(+i).toString(16).padStart(2, '0')).join('');
}
var cf = crossfilter(data),
dim = cf.dimension(d => ip_to_hex(d.ip));
从最高到最低排序):
"02167e01"