2 回答
TA贡献1807条经验 获得超9个赞
循环遍历IP地址并将地址保存为Object的键,如果遍历Object中已有的IP,则tracker可以获取其值并将其递增1或默认为1如果它不存在,因为它将是你第一次遇到那个IP。
const data = [
'192.168.1.254',
'192.168.1.254',
'192.168.1.254',
'192.168.1.254',
'192.168.1.254',
'10.40.89.79'
]
const tracker = {}
data.forEach(d => {
const count = d in tracker ? ++tracker[d] : 1
tracker[d] = count
})
Object.keys(tracker).forEach(k => console.log(`${k} (${tracker[k]})`))
TA贡献1858条经验 获得超8个赞
如果我理解正确,你想从字符串中获取所有ip-adresses然后将它们堆叠(删除重复项)。所以这个正则表达式:
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
可以检查IP地址。现在使用replace方法,我们可以获得所有的正则表达式匹配。然后我们可以遍历它们并删除重复项。看看这段代码:
var str = something;
var IPs = [];
str.replace(
/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gi,
function(match) {
IPs[IPs.length] = match;
return match;
}
);
var stackedIPs = {};
for (i = 0; i < IPs.length; i++) {
if (stackedIPs[IPs[i]] == null) {
stackedIPs[IPs[i]] = 1;
} else {
stackedIPs[IPs[i]] = stackedIPs[IPs[i]] + 1;
}
}
StackedIPs将为您提供如下所示的对象:
{
192.168.1.1: 3,
192.168.1.5: 2,
...
}
分配给每个IP地址的号码是找到它的次数。
添加回答
举报
