Форум рос и процветал. Заказчику потребовались возможности более тонкого управления приложением.
Напишите функцию, которая умеет возвращать посчитанную репутацию пользователя по формуле: разница лайков и дизлайков, которые ставят другие пользователи, умноженная на коэффициент. Коэффициент — доля не отредактированных сообщений пользователя. Если дизлайков больше, чем лайков, то коэффициент не применяется. Если сообщений у пользователя нет, его репутация равна 0.
- Объявите функцию с параметрами: количество лайков, дизлайков, количество отредактированных сообщений и общее количество сообщений.
- Посчитайте репутацию по формуле.
- Верните значение из функции.
- Вызовите функцию с различными значениями, напечатайте значение и убедитесь, что репутация считается верно.
Форумы содержат много тем для обсуждения, и вам часто приходится печатать по несколько сообщений из каждой темы. В одной книге вы прочитали, что такие частые операции нужно выделять в функции, и решили выделить печать ленты сообщений в теме в отдельную функцию.
На вход функция принимает объект темы thread, а также количество сообщений для печати.
Тестовый объект thread:
let thread = {
title: "Поделитесь книжкой",
author: "RuBrick",
total: 23,
messages: [
{
id: 13201,
date: "2018-01-09",
text: "Посоветуйте, пожалуйста, с одной стороны подробную, а с другой доступную для понимания книгу по javascript. Спасибо",
author: {
name: "RuBrick",
login: "ru_brick",
reputation: 3,
role: "user"
}
},
{
id: 13208,
date: "2018-01-12",
text: "Неужели нет хорошей литературы?",
author: {
name: "RuBrick",
login: "ru_brick",
reputation: 3,
role: "user"
}
},
{
id: 13209,
date: "2018-01-12",
text: "в общем, NodeJS это JS + некоторые доп. модули и объекты. Тебе нужна литература по самому JS и дока на официальном сайте.",
author: {
name: "Popov",
login: "popov_ma",
reputation: 2310,
role: "user"
}
},
{
id: 13219,
date: "2018-01-14",
text: "В сети много сайтов с хорошими объяснениями + есть курсы.",
author: {
name: "Void",
login: "void",
reputation: 5005,
role: "user"
}
},
{
id: 13220,
date: "2018-01-14",
text: "Есть большая книга «JavaScript. Подробное руководство», потом смотришь документацию.",
author: {
name: "noname",
login: "noname",
reputation: 100,
role: "user"
}
},
{
id: 13250,
date: "2018-01-19",
text: "Или можно посмотреть видеокурсы на YouTube! А самое главное — практика! И этот форум — лучшая тренировочная площадка!",
author: {
name: "noname",
login: "noname",
reputation: 110,
role: "user"
}
},
{
id: 13259,
date: "2018-01-20",
text: "Понял, спасибо!",
author: {
name: "RuBrick",
login: "ru_brick",
reputation: 13,
role: "user"
}
}
]
};- Объявите функцию с нужным количеством параметров.
- Выводите на печать заданное количество сообщений в этой теме. Если количество сообщений, которые нужно напечатать, меньше, чем общее число сообщений, то выбирайте самые новые сообщения — т. е. если нужно напечатать 5 сообщений, а всего в теме 10 сообщений, то нужно выбрать 5 самых свежих. Шаблон для печати:
Автор1 (репутация: 5): текст сообщения
Автор2 (репутация: 10): текст сообщений
- Если сообщений в теме нет, напечатайте текст «Ошибка формата! В теме нет сообщений».
- Убедитесь, что функция работает корректно.
В каждом сообщении вы решили хранить информацию о том, редактировалось оно или нет. Для этого вы используете ключ edited и устанавливаете его в true, если сообщение отредактировано, и в false в противном случае. Нужно написать функцию, которая по списку сообщений возвращала бы статистику: сколько сообщений из списка отредактировано, сколько нет и общее число сообщений в списке.
Тестовый массив allMessages:
let allMessages = [
{author: "zloy-zloy", text: "А у кого какой мобильный??", edited: true},
{author: "zloy-zloy", text: "Я с андроидом. Уже 3 года живёт, он самым крепким оказался, пережил 2 утопления.", edited: false},
{author: "МамаЗузу", text: "Айфон в своё время успешно сдох при первом же падении на кафельную плитку.", edited: false},
{author: "void", text: "У меня андроид. Особенно нравится, что никаких заморочек с айтюнс.", edited: false},
{author: "mama", text: "Айфон.", edited: false},
{author: "mama", text: "Почему не отвечаешь?", edited: false},
{author: "void", text: "Дэвид Хэрман «Сила JavaScript. 68 способов эффективного использования JS».", edited: false},
{author: "void", text: "Marijn Haverbeke, Вячеслав Голованов «Выразительный javascript: Введение».", edited: false},
{author: "void", text: "Ленюсь.", edited: false},
{author: "void", text: "Пока оценивать нечего.", edited: false},
{author: "void", text: "Не по-русски как-то получается, хоть и на русском.", edited: false},
{author: "ivanov", text: "Чип и Дейл прикольно, играл в детстве.", edited: false},
{author: "ivanov", text: "hello, world", edited: true},
{author: "void", text: "Сейчас напишу книгу по JS.", edited: false},
{author: "ivanov", text: "Спасибо.", edited: false},
{author: "ivanov", text: "Смысл такого видео? Все непонятные функции приходится самому смотреть. Надо не так делать. Пишете код — объясняете сразу, что к чему, голосом, ну, или там, текстом хотя бы, хотя лучше голосом.", edited: true},
{author: "void", text: "Поделитесь видеоканалами по js.", edited: false},
{author: "void", text: "Ничего не понравилось.", edited: false}
];- Создайте функцию, принимающую на вход список сообщений.
- Посчитайте общее количество сообщений, количество отредактированных и не отредактированных сообщений.
- Верните рассчитанные данные из функции.
В личном кабинете на сайте netology.ru в поле комментария к домашней работе пришлите ссылку на репозиторий с домашним заданием и отправьте работу на проверку.
- При выполнении задания придерживайтесь правил оформления кода на JavaScript.
- Никаких файлов прикреплять не нужно.
- Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке».