Сгруппировать 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, время: 23:06. |