Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сгруппировать IP и дату (https://javascript.ru/forum/misc/86077-sgruppirovat-ip-i-datu.html)

SpaceAlarm 03.09.2024 18:34

Сгруппировать 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]}
*/

})

рони 03.09.2024 19:37

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)

SpaceAlarm 03.09.2024 19:46

Спасибо большое, перепробовал много вариантов, но желаемого результата так и не достиг....

ksa 03.09.2024 20:15

Цитата:

Сообщение от SpaceAlarm
перепробовал много вариантов, но желаемого результата так и не достиг....

Такой еще вариант...

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.