Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 11.11.2022
Сообщений: 22

Как написать функцию, которая отсортирует комментарии в новый объект по двум параметрам?

09.12.2022, 16:32. Показов 756. Ответов 17

Студворк — интернет-сервис помощи студентам
Здравствуйте, надо сделать функцию, которая на входе получает массив комментариев. Необходимо вернуть объект в формате { OS: count, anotherOS: anotherCount, ... }, где OS - название операционной системы в строке, а count - число комментариев, которые оставили люди. Учитывать надо только комментарии от 2022 года. Год отзыва хранится в поле year, операционная система - в поле OS.
Пример на входе:
JavaScript
1
2
3
4
5
6
const data = [
  { name: 'Alice', city: 'Moscow', OS: 'IOS', year: 2014 },
  { name: 'Ivan', city: 'LA', OS: 'IOS', year: 2017 },
  { name: 'Greg', city: 'Yerevan', OS: 'Android', year: 2022 },
];
const result = topicalComments(data);
Пример на выходе:
JavaScript
1
2
3
4
console.log(result);
// { 
//   Android: 1, 
// }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2022, 16:32
Ответы с готовыми решениями:

Написать функцию, которая отсортирует заданную строку
Написать функцию order, которая отсортирует заданную строку. Каждое слово в строке содержит одну цифру. Эта цифра - позиция, которую...

Написать функцию order, которая отсортирует заданную строку
Написать функцию order, которая отсортирует заданную строку. Каждое слово в строке содержит одну цифру. Эта цифра - позиция, которую слово...

Написать функцию order, которая отсортирует заданную строку. Каждое слово в строке # содержит одну цифру. Эта цифра - по
Написать функцию order, которая отсортирует заданную строку. Каждое слово в строке # содержит одну цифру. Эта цифра - позиция, которую...

17
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,088
09.12.2022, 17:06
Как вариант...
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const data = [
  { name: 'Alice', city: 'Moscow', OS: 'IOS', year: 2014 },
  { name: 'Ivan', city: 'LA', OS: 'IOS', year: 2017 },
  { name: 'Greg', city: 'Yerevan', OS: 'Android', year: 2022 },
];
const result = topicalComments(data);
console.log(result)
 
function topicalComments(arr) {
    return arr.reduce((o, e) => {
        if (e.year >= 2022) o[e.OS] = o[e.OS] ?? 0 + 1
        return o
    }, {})
}
0
0 / 0 / 0
Регистрация: 11.11.2022
Сообщений: 22
09.12.2022, 18:01  [ТС]
Тест жалуется на слияние
JavaScript
1
SyntaxError: Unexpected token '?'
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,088
09.12.2022, 20:59
kli_, мой пример рабочий.
А где твой?
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
10.12.2022, 00:17
Цитата Сообщение от krvsa Посмотреть сообщение
мой пример рабочий
неа, нерабочий.
если функции скормить
JavaScript
1
2
3
4
5
const data = [
  { name: 'Alice', city: 'Moscow', OS: 'IOS', year: 2022 },
  { name: 'Ivan', city: 'LA', OS: 'IOS', year: 2022 },
  { name: 'Greg', city: 'Yerevan', OS: 'Android', year: 2022 },
];
то вернется
JavaScript
1
2
3
4
{
"IOS": 1,
"Android": 1
}
1
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
10.12.2022, 04:41
kli_, вы задачи научитесь для начала ставить корректно.
В заголовке есть слово "отсортирует", а в условии задачи вообще непонятно по какому критерию сортировать.
Может отфильтровать те строки, где 2022+ год и посчитать с группировкой по OS?
0
0 / 0 / 0
Регистрация: 11.11.2022
Сообщений: 22
10.12.2022, 10:46  [ТС]
функция должна брать комментарии от 2022 года и сортировать по OS (например, Android - 3, IOS - 2)
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,088
10.12.2022, 10:48
Лучший ответ Сообщение было отмечено kli_ как решение

Решение

AlexZaw, поправил...
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const data = [
  { name: 'Alice', city: 'Moscow', OS: 'IOS', year: 2022 },
  { name: 'Ivan', city: 'LA', OS: 'IOS', year: 2022 },
  { name: 'Greg', city: 'Yerevan', OS: 'Android', year: 2022 },
];
const result = topicalComments(data);
console.log(result)
 
function topicalComments(arr) {
    return arr.reduce((o, e) => {
        if (e.year >= 2022) o[e.OS] = (o[e.OS] ?? 0) + 1
        return o
    }, {})
}
Добавлено через 1 минуту
Цитата Сообщение от kli_ Посмотреть сообщение
сортировать по OS (например, Android - 3, IOS - 2)
Это не сортировка, а группировка, только с подсчетом количества.
2
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
10.12.2022, 12:19
Еще немного субботних реализаций

JavaScript
1
2
3
4
5
6
7
8
9
function groupOS (data) {
  let r = {};
  for(let o of data) {
    if (o.year >= 2022) {
      r[o.OS] = r[o.OS] ? r[o.OS] + 1 : 1;
  }
}
return r;
}

JavaScript
1
2
3
4
5
function groupOS2 (data) {
  let result = [...new Set(data.map(n => n.OS))].reduce((acc, cur) => {acc[cur] = 0; return acc}, {});
  data.forEach(e => e.year >= 2022 ? ++result[e.OS] : false);
return result;
}
JavaScript
1
2
3
4
5
function groupOS3 (data) {
  let result = [...new Set(data.map(n => n.OS))].reduce((acc, cur) => {acc[cur] = 0; return acc}, {});
  data.filter(e => (e.year >= 2022)).forEach(e => ++result[e.OS]);
return result;
}
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
10.12.2022, 12:53
Нужно больше тернарников!
JavaScript
1
2
3
4
5
function topicalComments(data) {
  let r = {};
  data.forEach(o => o.year >= 2022 ? (r[o.OS] = r[o.OS] ? r[o.OS] + 1 : 1) : null);
  return r;
}
Добавлено через 4 минуты
P.S. И еще больше знаков вопроса

JavaScript
1
2
3
4
5
6
function topicalComments(arr) {
    return arr.reduce((o, e) => {
        e.year >= 2022 ? (o[e.OS] = (o[e.OS] ?? 0) + 1) : null
        return o
    }, {})
}
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
10.12.2022, 13:07
Да, ternary hell устроим и превратим всё в одну циклопическую регулярку
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,447
Записей в блоге: 2
11.12.2022, 07:59
Цитата Сообщение от AlexZaw Посмотреть сообщение
P.S. И еще больше знаков вопроса
Ну уж если делать чего то больше, то функций
JavaScript
1
2
3
4
5
6
7
8
9
10
function topicalComments(arr) {
  return arr.filter(filterActual).reduce(getStat,{});
}
function filterActual(data) {
  return data.year >= 2022;
}
function getStat(result, curry) {
  result[curry.OS] = (result[curry.OS] ?? 0) + 1;
  return result;
}
Добавлено через 3 минуты
Или даже так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function topicalComments(arr) {
  const filterActual = configureActualFilter(2022);
  return arr.filter(filterActual).reduce(getStat,{});
}
function configureActualFilter(year){
  return function(data) {
    return data.year >= year;
  }
}
function getStat(result, curry) {
  result[curry.OS] = (result[curry.OS] ?? 0) + 1;
  return result;
}
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
11.12.2022, 08:26
Недоработочка! Числа - это тоже функции!

JavaScript
1
(()=> 2022)()
JavaScript
1
(()=> 0)()
JavaScript
1
(()=> 1)()
И никаких циклов, только рекурсии!
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
13.12.2022, 18:35
Цитата Сообщение от kli_ Посмотреть сообщение
Тест жалуется на слияние
Вангую, что интерпретатор там 2019- года и не поддерживает Nullish coalescing operator.
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,447
Записей в блоге: 2
13.12.2022, 18:39
Цитата Сообщение от KingdaKa Посмотреть сообщение
Недоработочка! Числа - это тоже функции!
Не... ну если жестить то хоть с обоснованием

Каждая функция выполняет одно действие, имя поясняет что делает (правда тут я явно не внимательно проработал), ну и одна функция согласно ТЗ являющаяся нашим интерфейсом для внешнего мира.
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
13.12.2022, 19:32
Цитата Сообщение от voral Посмотреть сообщение
Не... ну если жестить то хоть с обоснованием
Ну это из ФП - там переменные и числа тоже функции
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,447
Записей в блоге: 2
13.12.2022, 21:26
Цитата Сообщение от KingdaKa Посмотреть сообщение
Ну это из ФП - там переменные и числа тоже функции
фигасе.... функционального не приходилось в полной мере касаться.
0
23 / 9 / 4
Регистрация: 02.08.2022
Сообщений: 69
14.12.2022, 01:07
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
const topicalComments = data => {
    const o = {
        Android: 0,
        IOS: 0
    }
 
    for (let item of data) {
        item.OS && (item.year >= 2022) && (o[item.OS] += 1)
    }
 
    return o
}
Добавлено через 25 минут
JavaScript
1
2
3
4
5
6
7
8
const topicalComments = data =>
    data.reduce((a, c) => {
        a[c.OS] = a[c.OS] ?? 0
 
        c.OS && (c.year >= 2022) && (a[c.OS] += 1)
 
        return a
    }, {})
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2022, 01:07
Помогаю со студенческими работами здесь

Напишите шаблонную функцию, которая по двум однотипным указателям проверяет, указывают ли они на один объект
Вот задание: Предположим, что вам даётся два указателя на объект некоторого сложного полиморфного класса, который использует множественное...

Написать процедуру, которая по двум данным линейным спискам формирует новый список
Тема:Динамические структуры Написать процедуру, которая по двум данным линейным спискам формирует новый список, состоящий из элементов,...

Написать процедуру, которая по двум данным линейным спискам формирует новый список
Динамічні структури Написать процедуру, которая по двум данным линейным спискам формирует новый список, состоящий из элементов,...

Написать функцию, которая по двум числам формирует список из трех элементов
Здравствуйте, помоги пожалуйста решить задачу, большие проблемы с лиспом. help Условие : Написать функцию, которая по двум числам...

Написать функцию, которая по двум числам формирует список из двух элементов
Доброго дня) вот условие задачи: Написать функцию, которая по двум числам формирует список из двух эле- ментов: первый элемент —...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru