Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сортировка и фильтр объектов (https://javascript.ru/forum/events/85531-sortirovka-i-filtr-obektov.html)

ureech 07.10.2023 08:54

Сортировка и фильтр объектов
 
Всем привет.
var arr = [{
    item_id: "2",
    add_id: "1",
    time_start: "13:00"
}, {
    item_id: "2",
    add_id: "4",
    time_start: "13:00"
}, {
    item_id: "2",
    add_id: "11",
    time_start: "15:00"
}, {
    item_id: "3",
    add_id: "11",
    time_start: "15:00"
}]


Как мне отсортировать по двум параметрам. По одному, решение нашёл, когда в объекте не было времени.

const result = Array.from(new Set(pushId.map(s => s.item_id))).map(lab => {
    return {
        item_id: lab,
        add_id: pushId.filter(s => s.item_id === lab).map(edition => edition.add_id)
    }
})


console.log(result)
[{
    item_id: "2",
    add_id: ["1", "4", "11"]
}, {
    item_id: "3",
    add_id: "11"
}]


Но теперь появилось время и мне нужно не только по item_id, но и по времени,time_start. Что бы на выходе было

[{
    item_id: "2",
    add_id: ["1", "4"],
    time_start: "13:00"
}, {
    item_id: "2",
    add_id: ["11"],
   time_start: "15:00"
}, {
    item_id: "3",
    add_id: "11",
    time_start: "15:00"
}]


Самому не осилить)

voraa 07.10.2023 09:29

var arr = [{ item_id: "2", add_id: "1", time_start: "13:00" },{ item_id: "2", add_id: "4", time_start: "13:00" },{ item_id: "2", add_id: "11", time_start: "15:00" },{ item_id: "3", add_id: "11", time_start: "15:00" }]

const obj = arr.reduce ((map, {item_id, add_id, time_start}) => {
	const map_id = map[item_id] ?? (map[item_id] = {}, map[item_id]);
	const map_start = map_id[time_start]?? (map_id[time_start] = [], map_id[time_start]); 
	map_start.push(add_id);
	return map;
}, {});

const result = [];
for (const item_id in obj) {
	for (const time_start in obj[item_id]) {
		result.push({item_id, add_id:obj[item_id][time_start], time_start});
	}
}

console.log(result);

ureech 07.10.2023 10:23

Спасибушки).


Часовой пояс GMT +3, время: 18:21.