Сгруппировать IP и дату
Добрый вечер, нужна помощь в группировке даты с IP
let getIP = `
17.11.2023 06:27:17 213.151.11.164
17.11.2023 08:19:56 213.151.20.77
17.11.2023 10:45:44 213.151.20.77`
let userIp = getIP .match(/\b(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g)
let dateTime = getIP .match(/\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2}:\d{2}|\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2}|\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2}:\d{2}\s\d{3}\.\d{3}\.\d{3}\.\d{3}/g)
//Выбираем уникальные IP
const uniqueArray = [...new Set(userIp)];
uniqueArray.forEach(async(ipList) => {
console.log(ipList)
/*на выходе получаем Уникальные IP*/
/* Получаем
[213.151.11.164,
213.151.20.77]
*/
/* Что должно получаться:
{ip:213.151.11.164,
date: [17.11.2023 08:19:56, 17.11.2023 10:45:44]}
*/
})
|
SpaceAlarm,
let getIP = `
17.11.2023 06:27:17 213.151.11.164
17.11.2023 08:19:56 213.151.20.77
17.11.2023 10:45:44 213.151.20.77`;
let userIp = {};
let uniqueArray = [];
let arr = getIP.match(/\S+/gm);
for (let i = 0; i < arr.length; i++) {
let data = `${arr[i]} ${arr[++i]}`;
let ip = arr[++i];
if (ip in userIp) userIp[ip].date.push(data);
else {
let obj = {
ip,
date: [data]
};
userIp[ip] = obj;
uniqueArray.push(obj)
}
}
console.log(uniqueArray)
|
Спасибо большое, перепробовал много вариантов, но желаемого результата так и не достиг....
|
Цитата:
const getIP = `
17.11.2023 06:27:17 213.151.11.164
17.11.2023 08:19:56 213.151.20.77
17.11.2023 10:45:44 213.151.20.77`
const o = getIP.split('\n').reduce((o, s) => {
if (s) {
const a = s.split(' ')
o[a[2]] ??= []
o[a[2]].push(a.slice(0, 2).join(' '))
}
return o
}, {})
const a = Object.entries(o).map(([ip, date]) => ({ip, date}))
alert(JSON.stringify(a, true, 2))
|
| Часовой пояс GMT +3, время: 06:29. |