Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ещё 1 задачка (https://javascript.ru/forum/misc/83978-eshhjo-1-zadachka.html)

Mr_Po 03.05.2022 18:34

Ещё 1 задачка
 
Тебе нужно показать юзерам кто из их друзей онлайн и готов к общению! Создай функцию whoIsOnline, которая принимает массив объектов friends и определяет кто из них online, offline или away. Если у юзера стоит статус online, но его не было в сети более 10 минут (lastActivity > 10), то можно считать, что его статус отныне away.

Пример входящих данных:

[{
username: 'Alice',
status: 'online',
lastActivity: 10
}, {
username: 'Lucy',
status: 'offline',
lastActivity: 22
}, {
username: 'Bob',
status: 'online',
lastActivity: 104
}]
Результат функции whoIsOnline:

{
online: ['Alice'],
offline: ['Lucy'],
away: ['Bob']
}
Если на сайте нет активных юзеров, то результат должен выглядеть так:

{
offline: ['Lucy'],
away: ['Bob']
}
Если ваших друзей совсем нет в чате, то в функцию прийдет пустой массив []. В таком случае нужно вернуть пустой объект {}

Вот что я написал:
function whoIsOnline(friends) {
  const users = [
    {
      username: 'David',
      status: 'online',
      lastActivity: 10,

    }, {
      username: 'Lucy',
      status: 'offline',
      lastActivity: 22,
    }, {

      username: 'Bob',
      status: 'online',
      lastActivity: 104,
    }];

  let usersOnlineNames = '';

  for (const item of massivOnlines) {
    usersOnlineNames += item.username + ', ';
  }
}

voraa 03.05.2022 20:25

Вы думаете, что форум, что бы изучающим js задачки решать?
Направить можно, но давать готовое решение...
Какой тогда смысл в изучении?

Что такое massivOnlines? Где он описан?
Зачем const users = внутри функции? Где он используется?
whoIsOnline(friends) А как используется параметр friends?

Попробуйте сами написать условие, что бы определить, что юзверь online

рони 03.05.2022 20:36

Mr_Po,
const users = [{
            username: 'David',
            status: 'online',
            lastActivity: 10,
        }, {
            username: 'Lucy',
            status: 'offline',
            lastActivity: 22,
        }, {
            username: 'Bob',
            status: 'online',
            lastActivity: 104,
        }];
        function whoIsOnline(friends) {
            let usersOnlineNames = {};
            for (let {
                    username,
                    status,
                    lastActivity
                } of friends) {
                if (status == 'online' && lastActivity > 10) status = 'away';
                (usersOnlineNames[status] ??= []).push(username); 
            }
            return usersOnlineNames
        }
        console.log(whoIsOnline(users))

рони 03.05.2022 20:38

voraa,
ты прав)))

рони 03.05.2022 20:46

voraa,
как на твой взгляд лучше?
так
(usersOnlineNames[status] = usersOnlineNames[status] ? ? []).push(username);

или так
if(status in usersOnlineNames)usersOnlineNames[status].push(username);
                else usersOnlineNames[status] = [username];

Mr_Po 03.05.2022 22:30

ну я пробую сам решать, и свои идеи по решению пишу, а здесь на форуме я просто хочу получить помощь с решением, и подсказки что я делаю не так, если бы я не решал сам, я бы каждую задачу сюда постил, а так обращаюсь лишь с теми которые не до конца понимаю, если вас это бесит то приношу извинения, обращаться буду только по существенным проблемам

voraa 04.05.2022 07:25

Цитата:

Сообщение от рони
voraa,
как на твой взгляд лучше?

Я не любитель всегда пихать все в одно выражение
Я бы сделал так

usersOnlineNames[status] ??= [];
usersOnlineNames[status].push(username);

voraa 04.05.2022 07:30

Цитата:

Сообщение от Mr_Po
если вас это бесит то приношу извинения, обращаться буду только по существенным проблемам

Дело не в том, что бесит. Просто писать готовое решение - толку мало для изучающего.
Я задавал вопросы, на которые вы должны были ответить для себя.
Каждая строка в программе имеет какой то смысл.
Вот и думайте, попытайтесь объяснить самому себе: Этот оператор делает то-то... Эту строку я написал, для того что бы....

рони 04.05.2022 07:40

Цитата:

Сообщение от voraa
Я бы сделал так

:thanks:

voraa 04.05.2022 07:49

Цитата:

Сообщение от рони
Сообщение от voraa
Я бы сделал так

Я просто стараюсь писать понятнее для себя. Что бы через полгода, год самому быстрее понять, что я хотел тут изобразить. Как мне понятнее, так и пишу. На разбор длинных сложных выражений уйдет больше времени.


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