Ответы пользователя по тегу JavaScript
  • Как получить полный путь до значения в объекте JavaScript?

    Aliansys
    @Aliansys
    var obj = {
        MainService: [
            {
                Id: "733",
                Name: "service",
                MainService: [
                    {
                        Id: "238",
                        Name: "service 1",
                        Service: [
                            {
                                Id: "145",
                                Name: "Service 2"
                            }
                        ]
                    }
                ]
            }
        ]
    };
    
    function recur(branch, str_paths) {
        var paths = str_paths.paths || [],
            str = str_paths.str || '',
            item;
        for (item in branch) {
            console.log(item)
            if (typeof(branch[item]) === 'object' && branch[item] !== null) { 
                str += str.length ? '.' + item : item;
                recur(branch[item], {str: str, paths: paths});
            } else {
    //            str += '.' + item;
                paths.push(str + '.' + item);
            }
        }
        return paths;
    }
    
    var res = recur(obj, {});
    console.log('Final res: ', res);


    Если я правильно понимаю задачу, то с этим фиксом вашего кода в результате в массиве "путей" будут всевозможные пути.

    ["MainService.0.Id", 
    "MainService.0.Name",
    "MainService.0.MainService.0.Id", 
    "MainService.0.MainService.0.Name", 
    "MainService.0.MainService.0.Service.0.Id", 
    "MainService.0.MainService.0.Service.0.Name"]
    Ответ написан
  • Как вернуть конкретный элемент из массива js?

    Aliansys
    @Aliansys
    Может вам лучше посмотреть в сторону .filter? Он вернет массив элементов удовлетворяющих необходимому условию.
    Ответ написан
    1 комментарий
  • Добавление и удаление класса по истечению времени, на странице - как?

    Aliansys
    @Aliansys
    Что касательно Таймаута, то this в анонимной функции уже будет ссылаться не туда куда вы хотите. Нужно делать либо замыкание, либо использовать .bind, в современных браузерах.

    Пример:
    setTimeout (function(){
                $(this).removeClass('selected');
             }.bind(this), 1000);

    В .bind первым аргументом отдается контекст. Больше можете почитать в гугле )
    Ответ написан
    Комментировать
  • Цикл в цикле или почему останавливается цикл?

    Aliansys
    @Aliansys
    У вас j после первого прохода становится равным 31. Цикл по i идет полностью, а по j один раз всего. Допишите, например, j = 30; в конце цикла по i и все будет как надо

    var tmp = [],
        i = 12,
        j = 30;
    for (; i < 22; i++) {
      for (; j < 31; j++) {
        tmp.push(i + ':' + j);
        document.write(i + ':' + j);
      }
      j = 30;
    }
    Ответ написан
  • Как передать данные при коннекте Socket IO?

    Aliansys
    @Aliansys
    Я бы предложил Вам попробовать вынести всю работу с сокетами в одно место, то есть либо все за пределами document.ready, либо все внутри. А то у вас событие onConnect навешивается в doument.ready, а коннект к серверу происходит до этого момента. Возможно listener просто еще не навешан, когда вы соединяетесь с сервером.
    Ну и побольше консоль логов написать, чтобы понять в каком месте что не отрабатывает. С виду все написано верно, что касается самих пересылок сообщений.
    Ну и да, на сервере socket.emit отправит сообщение самому себе. Но второе (socket.broadcast.emit) должно сделать то что вы хотите (отправит всем, кроме себя).
    Ответ написан
    Комментировать
  • Как отправить сообщение к конкретным пользователям?

    Aliansys
    @Aliansys
    Из документации socket.io (отправка сообщений)
    // отправить текущему сокету сформировавшему запрос (туда откуда пришла)
    socket.emit('message', "this is a test");
    
    // отправить всем пользователям, включая отправителя
    io.sockets.emit('message', "this is a test");
    
    // отправить всем, кроме отправителя
    socket.broadcast.emit('message', "this is a test");
    
    // отправить всем клиентам в комнате (канале) 'game', кроме отправителя
    socket.broadcast.to('game').emit('message', 'nice game');
    
    // отправить всем клиентам в комнате (канале) 'game', включая отправителя
    io.sockets.in('game').emit('message', 'cool game');
    
    // отправить конкретному сокету, по socketid
    io.sockets.socket(socketid).emit('message', 'for your eyes only');
    Ответ написан
    19 комментариев