Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.05.2022, 18:34
Интересующийся
Отправить личное сообщение для Mr_Po Посмотреть профиль Найти все сообщения от Mr_Po
 
Регистрация: 20.04.2022
Сообщений: 10

Ещё 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 + ', ';
  }
}
Ответить с цитированием
  #2 (permalink)  
Старый 03.05.2022, 20:25
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

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

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

Попробуйте сами написать условие, что бы определить, что юзверь online
Ответить с цитированием
  #3 (permalink)  
Старый 03.05.2022, 20:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

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))

Последний раз редактировалось рони, 04.05.2022 в 19:08.
Ответить с цитированием
  #4 (permalink)  
Старый 03.05.2022, 20:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

voraa,
ты прав)))
Ответить с цитированием
  #5 (permalink)  
Старый 03.05.2022, 20:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

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

или так
if(status in usersOnlineNames)usersOnlineNames[status].push(username);
                else usersOnlineNames[status] = [username];
Ответить с цитированием
  #6 (permalink)  
Старый 03.05.2022, 22:30
Интересующийся
Отправить личное сообщение для Mr_Po Посмотреть профиль Найти все сообщения от Mr_Po
 
Регистрация: 20.04.2022
Сообщений: 10

ну я пробую сам решать, и свои идеи по решению пишу, а здесь на форуме я просто хочу получить помощь с решением, и подсказки что я делаю не так, если бы я не решал сам, я бы каждую задачу сюда постил, а так обращаюсь лишь с теми которые не до конца понимаю, если вас это бесит то приношу извинения, обращаться буду только по существенным проблемам
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2022, 07:25
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

Сообщение от рони
voraa,
как на твой взгляд лучше?
Я не любитель всегда пихать все в одно выражение
Я бы сделал так

usersOnlineNames[status] ??= [];
usersOnlineNames[status].push(username);
Ответить с цитированием
  #8 (permalink)  
Старый 04.05.2022, 07:30
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

Сообщение от Mr_Po
если вас это бесит то приношу извинения, обращаться буду только по существенным проблемам
Дело не в том, что бесит. Просто писать готовое решение - толку мало для изучающего.
Я задавал вопросы, на которые вы должны были ответить для себя.
Каждая строка в программе имеет какой то смысл.
Вот и думайте, попытайтесь объяснить самому себе: Этот оператор делает то-то... Эту строку я написал, для того что бы....
Ответить с цитированием
  #9 (permalink)  
Старый 04.05.2022, 07:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от voraa
Я бы сделал так
Ответить с цитированием
  #10 (permalink)  
Старый 04.05.2022, 07:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По нажатию ссылки, нажымаеться еще одна karakym Общие вопросы Javascript 7 25.09.2014 21:27
Повесить событие на еще не созданный елемент jeysmook Javascript под браузер 4 07.09.2014 15:25
При выборе определенного пункта select'а появляется еще поле MasterDmx Элементы интерфейса 3 03.06.2014 17:13
еще и еще. как понять avrudoi Элементы интерфейса 2 15.01.2014 17:40
Еще один вопрос по setTimeout setInterval Хранитель Света Общие вопросы Javascript 5 12.03.2009 22:37