• Задачка с нахождением анаграмм в массиве?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    как можно улучшить данный код

    Избежать лишних действий.

    Например, незачем на каждом шаге снова разбивать и сортировать исходное слово – достаточно сделать это один раз:
    function anagrams(word, words) {
        const sample = word.split('').sort().join('');
        return words.filter(function (e) {
            return e.split('').sort().join('') === sample;
        })
    }


    Нет смысла проверять неподходящие по длине слова.
    function anagrams(word, words) {
        const length = word.length;
        const sample = word.split('').sort().join('');
        return words.filter(w => w.length === length)
            .filter(function (e) {
                return e.split('').sort().join('') === sample;
            })
    }


    P.S. я вот такое решение отправил. Сравнить длину. Привести к lowercase. Запоминать позиции, в которых найден очередной символ и дальше искать после этой позиции (если будут повторы этого же символа). Как только какой-то символ не найден – всё, не совпали.
    Код
    // write the function isAnagram
    var isAnagram = function(test, original) {
      const length = original.length;
    
      if (length !== test.length) return false;
    
      const A = test.toLowerCase();
      const B = original.toLowerCase();
      const dict = {};
    
      for (let i=0, char, pos; i < length; i++) {
        char = A[i];
        pos = B.indexOf(char, +dict[char]);
        if (!~pos) return false;
        dict[char] = pos + 1;
      }
    
      return true;
    };
    Ответ написан
    Комментировать
  • Как сделать так, чтобы хэши md5 совпадали у python и js?

    Строка должна быть также в utf8. Извините за говно код, но вот пример
    const md5 = require("pure-md5")
    const utf8 = require('utf8');
    console.log(md5.md5(utf8.encode("Привет")))
    Ответ написан
    Комментировать
  • Как работает instanceof?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Instance - Это экземпляр.
    Используя A instanceof B, Вы как бы спрашиваете: является ли А экземпляром класса B?
    Классов у нас нет, но есть прототипное наследование и функции-консструкторы взамен.

    Экземпляр возвращается конструктором через new неявно, или же если в конструкторе Вы строго укажите какой объект, в качестве экземпляра, будет возвращён.

    В примере же указано что функция-конструктор должна возвращать себя же.
    Таким образом, фукнция - не экземпляр самой себя.
    Отсюда и new F() instanceof F - false;

    Но!
    Функции в JS являются экземплярами класса Function.
    А в примере, как уже писалось выше, функция конструтор возвращает саму себя, следовательно, возвращает объект-экземпляр клаcса Function.
    Отсюда и new F() instanceof Function - true;
    Ответ написан
    Комментировать
  • Как найти длину строки через итеративный процесс?

    Lynn
    @Lynn
    nginx, js, css
    Это конечно странное действие.

    По вопросу, n++ возвращает предыдущее значение, т.е. у вас бесконечно вызывается iter(0). Замените iter(n++) на iter(n+1).
    Ответ написан
    1 комментарий
  • Где найти код встроенных функций js?

    2chevskii
    @2chevskii
    Если бы каждый мог в поиск, тостер бы вымер.
    Залезть в сорс v8, например.
    Тут
    Ответ написан
    Комментировать
  • Возможно низкоуровневое программирование без математики?

    Adamos
    @Adamos
    Стоит ли идти в эту сферу, или это обреченно на провал?

    Вам - не стоит. Вы не осилили даже нагуглить ответ на один из самых частых вопросов на Тостере, так что к этой сфере со всей очевидностью не подходите.
    Ответ написан
    Комментировать
  • Что позволяет записывать в функции статические методы?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Воспользуюсь спорным штампом и отвечу: так происходит, потому что "в JS всё - объект". Соответственно, как объектам, мы можем назначать свойства.
    С примитивами всё несколько сложнее. Мы вроде бы тоже можем назначить им свойство, но это иллюзия. Когда мы делаем подобное с примитивами, например строкой, то вызывается её конструктор String(), а когда операция "под капотом" завершается, то мы снова получаем примитив, таким образом, ошибки назначения свойства не возникает, но и свойство недоступно.

    Это если сжато.
    Подробно объяснять не быстро. Скорее всего Вам тут посоветуют почитать документацию, спецификацию. Я предложу почитать серию книг You Dont Know JS. Можно нагуглить перевод многих глав из этой серии книг.
    Ответ написан
    Комментировать
  • Как добавить информацию поверх web-страницы через точку доступа Wi-Fi?

    @antonwx
    Придётся перехватывать трафик например с помощью squid. Затем модифицировать и отдавать обратно. Но на каждом клиенте должен будет быть установлен ваш корневой сертификат, которым вы (а точнее прокси) будете подписывать новые страницы. Вот только будет ли кто-то в здравом уме подобным wi-fi пользоваться?
    Ответ написан
    4 комментария
  • Можно ли сделать сетеры для методов массива?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Может, переопределить метод на экземпляре?
    var a = [];
    a.push = function() {
      Array.prototype.push.apply(this, arguments);
      // todo
      console.log("QnA.habr");
    }
    
    a.push(5); // QnA.habr
    a.toString() // Array [ 5 ]
    Ответ написан
    Комментировать
  • Можно ли так сделать на js и php?

    nuclear_kote
    @nuclear_kote
    если переход на другую страницу случился то тот запрос уже не ответит. Можно сделать доп метод который будет возвращать результат и дергать его раз в секунду например, ну или вебсокеты. Вообще обычно кидается в очередь и асинхронно обрабатывается например другим сервисом, потом в другую очередь ответы кидаются или пишется в базу результат. + впринципе долгий запрос может по таймауту клиента отвалиться, он выполнится, но результат потеряется
    Ответ написан
    2 комментария
  • Почему не работает функция в браузере?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    function nameOfFunction () {
    alert (2+3);
    }

    nameOfFanction(); // опечатка.

    Вам редактор должен был предлагать автодополнением название Вашей функции (при попытке вызвать её), если бы Вы его использовали, то не было бы опечатки.
    Так же рекомендую научиться пользоваться линтером. (ESLint)
    Ответ написан
    Комментировать
  • Как разбить объект на несколько частей?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const chunked = (arr, chunkSize) =>
      Array.from(
        { length: Math.ceil(arr.length / chunkSize) },
        (n, i) => arr.slice(i * chunkSize, (i + 1) * chunkSize)
      );
    
    
    const arr = chunked(Object.entries(obj), 10).map(Object.fromEntries);
    Ответ написан
    1 комментарий
  • Как автоматически транслировать любой готовый алгоритм с любого ЯП на любой другой ЯП без ущерба для скорости работы алгоритма?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Зачем?
    Улучшает ли это читабельность? Не улучшает.
    Возможно дело в произвлдительности? Вы ее просто растрачиваете на беготню по массиву.
    Может кода меньше? Опять nope.

    писать конвертеры такого кода на другие языки и удобно мониторить их изменение.

    Зачем в принципе их писать?

    UPD

    Как автоматически транслировать любой готовый алгоритм с любого ЯП на любой другой ЯП без ущерба для скорости работы алгоритма?

    Никак, буквально никак. Потому что:

    1. Способы работы с памятью и оптимизации производительности разные.
    2. Конструкции, используемые в конкретных языках для конкретных алгоритмов отличаются.
    3. Отличаются стандартные библиотеки, как следствие алгоритм, который вы хотите транслировать с одного языка может быть в стандартной библиотеке другого.
    Ответ написан
    31 комментарий
  • Scss - Возможно ли, сделать свои названия классов?

    @lilwings
    .cursor {
      &-pointer {
        cursor: pointer;
      }
    
      &-unset {
        cursor: unset;
      }
    }
    Ответ написан
    Комментировать
  • Правильно ли при клике остановить таким образом Timeout?

    @LoveCodeandCoffe
    Дополню Aetae
    document .querySelector("#close").addEventListener("click",  () =>clearTimeout(cityRemoveTime));

    Когда тебе нужно выполнить функцию после somthing события используй вызов безымянной функции , которая выполнит нужную тебе функцию т.е всегда используй такую конструкцию () => // your func
    + стрелочной функции в том, что ты можешь передать дополнительные параметры в функцию обработчик
    Ответ написан
    4 комментария
  • Правильно ли при клике остановить таким образом Timeout?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Нет.
    Утрируя: скобочки после имени функции - это вызов этой функции прям сейчас, вон там где ты это написал.
    Обработчиком на клик в данном случае, соответственно, назначается то, что функция возвращает. А clearTimeout у нас не возвращает ничего.
    В итоге прямо в момент запуска кода cityRemoveTime будет остановлен, а на каждый клик у нас будет происходить ничего.
    Ответ написан
    Комментировать
  • С# - что стоит изучать, чтобы попасть на первую работу?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Можно пойти на хэдхантер и посмотреть какие технологии просят рядом с c#. На мой взгляд самый большой спрос на фулстек разработчиков. Это значит c# + asp.net + EntityFramework + TSQL +js. За год можно «нахвататься» на джуна, если будете стараться, забудете про досуг и развлекухи. А потом после устройства на работу еще нужно будет по вечерам дотягивать пару лет точно.
    Ответ написан
    4 комментария
  • Кто может пояснить код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вызов inBetween(3, 6) возвращает не строку, не число, а функкцию.

    Можно длиннее записать:
    var daFunc = inBetween(3, 6); // daFunc это функция
    
    arr.filter(daFunc);

    Почти1 то же, что:
    var daFunc = function() {
      console.log(arguments);
    }
    
    arr.filter(daFunc);
    1«Почти» — потому, что контекст тут другой будет. Всякие a и b не будут определены.

    Или:
    function daFunc() { console.log(arguments); }
    
    arr.filter(daFunc);

    Или:
    arr.filter( function() { console.log(arguments); });


    В общем, arguments там никакой не внешний / родительский / фильтрованный, а свой собственный.
    С чем вызвали — то и получили. Вызвали в фильтре – аргументы фильтровские и получили.
    Ответ написан
    Комментировать
  • Блокировщик трекеров браузера отрубает GTM и искажает скрипты сайта, что с этим поделать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Правильным будет прекратить отслеживать пользователя, который не хочет, чтобы его отслеживали.

    Как определить блокировщик, легко гуглится. Хотя даже без гугла не вижу проблемы - можно легко догадаться проверить наличие/видимость баннера, например. А если баннеров нет, то происследовать результат работы блокировщика, он же на виду.
    Ответ написан
    Комментировать