32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 564

Как найти и сгруппировать объекты по полю

28.06.2024, 19:16. Показов 686. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
let values = [
{
  exchange: 'MEXC',
  category: 'SPOT',
  nameCoin: 'SOL',
},
{
  exchange: 'MEXC',
  category: 'SPOT',
  nameCoin: 'ETH',
},
{
  exchange: 'MEXC',
  category: 'SPOT',
  nameCoin: 'BTC',
},
{
  exchange: 'BITMART',
  category: 'SPOT',
  nameCoin: 'BTC',
},
{
  exchange: 'BITMART',
  category: 'SPOT',
  nameCoin: 'ETH',
},
{
  exchange: 'BITMART',
  category: 'SPOT',
  nameCoin: 'SOL',
},
{
  exchange: 'GATE',
  category: 'SPOT',
  nameCoin: 'ETH',
},
{
  exchange: 'GATE',
  category: 'SPOT',
  nameCoin: 'BTC',
},
{
  exchange: 'GATE',
  category: 'SPOT',
  nameCoin: 'SOL',
}
 
]
как можно найти дубликаты объектов и потом их сгруппировать, по полю 'nameCoin', чтобы получить массив массивов [[BTC, BTC, BTC], [ETH, ETH, ETH], [SOL, SOL, SOL]]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2024, 19:16
Ответы с готовыми решениями:

Как сгруппировать объекты в Graph3D?
Нужна помощь. Пытаюсь написать прогу кубика-рубика 2 на 2. 1) Как сгуппировать объекты в graph3d (допустим, плоскость а1+плоскость...

Как сгруппировать объекты в классе
Всем привет! Вопрос такой: есть класс к примеру- со свойством Name типа string и со свойством Model типа List<string>. По сути...

Подскажите как сгруппировать запрос по полю ... и сложить текстовое поле ...
select estruct.name, personal.user_id, personal.name, posts.pname, personal.locked, contr.contr_name from personal, usersobj, amatrix,...

9
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
28.06.2024, 19:23
Цитата Сообщение от HAIRY Посмотреть сообщение
чтобы получить массив массивов [[BTC, BTC, BTC], [ETH, ETH, ETH], [SOL, SOL, SOL]]
Не совсем понятно, зачем вообще несколько раз повторять одно и то же...

Добавлено через 1 минуту
HAIRY, тебе уже несколько раз показывали как можно "группировать данные"...
Например тут Как найти максимум и минимум в дубликатах
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 564
28.06.2024, 19:36  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Не совсем понятно, зачем вообще несколько раз повторять одно и то же...
да, там просто перед группировкой сравнение, а тут чисто по полю.
тот код просто не совсем понимаю
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
28.06.2024, 20:04
HAIRY, ты понимаешь что твой массив
Цитата Сообщение от HAIRY Посмотреть сообщение
[[BTC, BTC, BTC], [ETH, ETH, ETH], [SOL, SOL, SOL]]
Какая-то ерунда?
Какой смысл повторять трижды [BTC, BTC, BTC]?
Если можно просто записать их количество, например
JavaScript
1
2
3
4
5
{
   BTC: 3,
   ETH: 1,
   SOL: 5
}
Минимум текста - та же информация...
0
 Аватар для NTHing
1782 / 963 / 388
Регистрация: 26.11.2014
Сообщений: 1,966
Записей в блоге: 1
28.06.2024, 22:35
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
const groupedByCoin = values.reduce((acc, obj) => {
    const key = obj.nameCoin;
    if (!acc.has(key)) {
        acc.set(key, []);
    }
    acc.get(key).push(obj);
    return acc;
}, new Map());
const groupedArray = Array.from(groupedByCoin.values());
 
const result = groupedArray.map((group) => group.map((item) => item.nameCoin));
 
console.log(result); //[[ 'SOL', 'SOL', 'SOL' ], [ 'ETH', 'ETH', 'ETH' ], [ 'BTC', 'BTC', 'BTC' ]]
1
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
28.06.2024, 23:07
JavaScript
1
2
3
const res = [...new Set(values.map(({nameCoin}) => nameCoin))].map(
    n => values.filter(({nameCoin}) => nameCoin === n).map(({nameCoin}) => nameCoin)
);
1
 Аватар для NTHing
1782 / 963 / 388
Регистрация: 26.11.2014
Сообщений: 1,966
Записей в блоге: 1
29.06.2024, 00:41
Лучший ответ Сообщение было отмечено HAIRY как решение

Решение

Реже нужно ходить по структурам данных...
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
let values = [
    { exchange: "MEXC", category: "SPOT", nameCoin: "SOL" },
    { exchange: "MEXC", category: "SPOT", nameCoin: "ETH" },
    { exchange: "MEXC", category: "SPOT", nameCoin: "BTC" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "BTC" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "ETH" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "SOL" },
    { exchange: "GATE", category: "SPOT", nameCoin: "ETH" },
    { exchange: "GATE", category: "SPOT", nameCoin: "BTC" },
    { exchange: "GATE", category: "SPOT", nameCoin: "SOL" },
];
// adding more items
for (let i = 0; i < 1_000_000; i++) {
    for (let j = 0; j < 3; j++) {
        values.push(values[j]);
    }
}
// adding more items
 
// NTHing 1
const averageN1 =
    Array.from({ length: 10 }).reduce((acc) => {
        const start = performance.now();
 
        const groupedByCoin = values.reduce((acc, obj) => {
            if (!acc.has(obj.nameCoin)) acc.set(obj.nameCoin, []);
            acc.get(obj.nameCoin).push(obj);
            return acc;
        }, new Map());
 
        const result = Array.from(groupedByCoin.values()).map((group) =>
            group.map((item) => item.nameCoin)
        );
 
        return acc + (performance.now() - start);
    }, 0) / 10;
console.log(`averageN1 is: ${Math.floor(averageN1)}`);
// NTHing 1
 
// NTHing 2
const averageN2 =
    Array.from({ length: 10 }).reduce((acc) => {
        const start = performance.now();
 
        const result2 = values.reduce((acc, { nameCoin }) => {
            if (!acc[nameCoin]) {
                acc[nameCoin] = [];
            }
            acc[nameCoin].push(nameCoin);
            return acc;
        }, {});
 
        const finalResult = Object.values(result2);
 
        return acc + (performance.now() - start);
    }, 0) / 10;
console.log(`averageN2 is: ${Math.floor(averageN2)}`);
// NTHing 2
 
// klyapa
const klyapa =
    Array.from({ length: 10 }).reduce((acc) => {
        const start = performance.now();
        const res = [...new Set(values.map(({ nameCoin }) => nameCoin))].map((n) =>
            values
                .filter(({ nameCoin }) => nameCoin === n)
                .map(({ nameCoin }) => nameCoin)
        );
 
        const finalResult = Object.values(res);
 
        return acc + (performance.now() - start);
    }, 0) / 10;
console.log(`averageKlyapa is: ${Math.floor(klyapa)}`);
// klyapa
2
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
29.06.2024, 08:44
Лучший ответ Сообщение было отмечено mr_dramm как решение

Решение

Цитата Сообщение от NTHing Посмотреть сообщение
Реже нужно ходить по структурам данных...
О то ж!

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const arr = [
    { exchange: "MEXC", category: "SPOT", nameCoin: "SOL" },
    { exchange: "MEXC", category: "SPOT", nameCoin: "ETH" },
    { exchange: "MEXC", category: "SPOT", nameCoin: "BTC" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "BTC" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "ETH" },
    { exchange: "BITMART", category: "SPOT", nameCoin: "SOL" },
    { exchange: "GATE", category: "SPOT", nameCoin: "ETH" },
    { exchange: "GATE", category: "SPOT", nameCoin: "BTC" },
    { exchange: "GATE", category: "SPOT", nameCoin: "SOL" },
];
const o = arr.reduce((obj, o) => (obj[o.nameCoin] = (obj[o.nameCoin] ?? 0) + 1, obj), {})
const a = Object.entries(o).map(a => new Array(a[1]).fill(a[0]))
console.log(a)
3
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
29.06.2024, 10:26
krvsa, хорошо придумал вместо N (arr.length) push сделать по одному fill для каждого ключа
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3844 / 1703 / 431
Регистрация: 14.03.2022
Сообщений: 4,350
30.06.2024, 18:42
mr_dramm, я просто хотел показать как
Цитата Сообщение от krvsa Посмотреть сообщение
Если можно просто записать их количество, например
JavaScript
1
2
3
4
5
{
   BTC: 3,
   ETH: 1,
   SOL: 5
}
Мое предложение можно реализовать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2024, 18:42
Помогаю со студенческими работами здесь

Как сгруппировать объекты классы по одинаковому атрибуту?
Имеется такой код: class Person: def __init__(self, age, name): self.age = age self.name = name ...

Как программно сгруппировать выбранные объекты в Word
В Word есть набор объектов типа Shape нужно среди них выбрать несколько по определенному признаку и сгруппировать в 1. Для...

Можно ли сгруппировать линии (объекты Shape)
Здравствуйте. Начал изучать WPF вчера так что сильно не ругайте. Можно ли сгруппировать линии (да и вообще объекты Shape) так чтобы...

Сгруппировать по полю Datetime только часть времени (год, месяц) и вывести его
Есть таблица с полем datetime. Мне нужно сгруппировать по этому полю только часть времени(год, месяц) и вывести его.

Найти среднее значение по полю, как?
друзья помогите, в субд не силен вообще, вот есть моя БД, и нужно сделать 3 запроса 1) Найти предмет, по которому никто не получал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru