Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.10.2023, 08:54
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Сортировка и фильтр объектов
Всем привет.
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"
}]


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

Последний раз редактировалось ureech, 07.10.2023 в 08:57.
Ответить с цитированием
  #2 (permalink)  
Старый 07.10.2023, 09:29
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,742

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);
Ответить с цитированием
  #3 (permalink)  
Старый 07.10.2023, 10:23
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Спасибушки).
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать фильтр Андрей812 Работа 8 10.09.2018 15:42
фильтр java. Сортировка kirik1982 Общие вопросы Javascript 2 26.03.2015 18:50
Сортировка JS объектов браузером по умолчанию estonets Общие вопросы Javascript 3 29.04.2014 17:08
Jquery UI Sortable, автоматическая сортировка объектов по нажатию кнопки. Professor jQuery 5 11.11.2010 16:17
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28