Задать вопрос
  • Почему при глубоком копировании объектов переполняется стек вызовов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вероятно, клонируемый объект содержит циклические ссылки, типа
    const a = {};
    const b = {};
    a.b = b;
    b.a = a;
    
    cloneDeep(a); // бесконечный цикл

    Попробуйте подсмотреть реализацию cloneDeep() в loDash. В реале там вызывается baseClone()

    Можно сохранять каждый обработанный ранее объект в Map – и проверять, не имели ли с ним уже дела ранее – тогда вместо изготовления ещё одной копии просто вставлять ранее сделанный клон.
    Ответ написан
    1 комментарий
  • Как правильно сделать проверку со второго слова?

    lina666
    @lina666
    Изучаю веб ЯП.
    У тебя не совсем верная логика в js
    1. Ты инициализируешь cities внутри функции которую вызываешь при нажатии на кнопку => после выполнения функции просто теряешь данные.
    2. var желательно не использовать в новом js, можно но он не так явно работает из за приколов с областью видимости и инициализацией, лучше использовать let или const.
    3. Было близко, в своем коде ты получаешь последнее слово из массива cities, нужно так же по аналогии получить из него последнюю букву (пример в коде)
    let cities = [];
    
    function myGame() {
        const input = document.getElementById('input_city');
        const output = document.getElementById('output_city');
    
       //Если массив пустой добавим 1е слово без всяких проверок. 
      if (!cities.length) {
        console.log('Верно идем дальше');
            cities.push(input.value);
            input.value = '' 
        console.log(cities)
        return
      }
      const lastCity = cities[cities.length - 1];
      const lastLetter = lastCity[lastCity.length - 1];
    
      const firstLetter = input.value.substr(0, 1); // первая буква слова
    
        if (lastLetter.toLowerCase() === firstLetter.toLowerCase()) {
            console.log('Верно идем дальше');
            cities.push(input.value);
            input.value = ''   
        } else {
          console.log('Херня, давай сначала.')
        }
        console.log(cities);
    }
    Ответ написан
    2 комментария
  • Игры для изучения программирования детям?

    Lunali
    @Lunali
    скрытна.
    tynker https://www.tynker.com/ , или https://checkio.org/ru/
    Детям это не нужно Им не нужна игра .
    Ваш ребенок любит математику? если нет как насчет отдать на курсы игры на синтезаторе и вокала? https://www.youtube.com/watch?v=KVAe0agGZhQ
    Если любит, то сразу с ява скрипт учите, не портите ребенку обучение или дайте ему скретч https://scratch.mit.edu/ , но только с ява скрипт и вначале ява скрипт потом скретч

    можете взглянуть на это zhurnal.lib.ru/h/hlada_s/python.shtml , но я питон не рекомендую ,учите ява скрипт
    Ответ написан
    Комментировать
  • Игры для изучения программирования детям?

    krdpsr
    @krdpsr
    loading...
    Kodu
    но там очень примитивный визуальный язык программирования
    без циклов или ветвлений
    но игры шикарные получаются
    7+

    и есть Вебкодер - там в визуальном виде js css html php
    причем там js и php это один язык
    уровень сложности как в Скретче, но возможности как у взрослых
    10-12+
    Ответ написан
    1 комментарий
  • Где практиковаться после прочтения книг по JavaScript?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На своём компьютере.
    Ответ написан
    Комментировать
  • Аналог dropdown menu с 25 значениями для мобильного сайта?

    @cheeroque
    Используйте select. На мобильниках прекрасно работает с любым количеством элементов.
    Ответ написан
    1 комментарий
  • Как один элемент объекта засунуть в массив?

    WblCHA
    @WblCHA
    Как вытащить все значения born и died, в два разных массива

    А зачем?
    const getAverageAge = (humans) => humans.reduce((acc, h) => acc + (h.died - h.born), 0) / humans.length;
    Ответ написан
    Комментировать
  • Можно ли сделать сетеры для методов массива?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    JS вполне себе динамический язык, позволяющий многое, но некоторыми вещами стоит пользоваться с осторожностью, чтобы потом не было мучительно больно это отлаживать.
    Нужные методы можно подменить, просто перезаписав в них новые функции, но лучше делать это не глобально для всех массивов на прототипе, а на конкретном инстансе массива, например так:
    const arr = []; // создали массив
    arr.push = function() { // перезаписываем конкретно его push
      Array.prototype.push.apply(this, arguments); // вызвали оригинальный push со всеми аргументами
      // тут делаем еще что-то
    };

    Еще что-то может производить неожиданный эффект, который впоследствии доставит боли при дебаге такого кода, поэтому как рекомендовали выше, лучше пользоваться декоратором, но метод вполне рабочий, и используется например в vue.js для отслеживания изменений в массивах
    Ответ написан
    2 комментария
  • Как заменить все цифры на странице?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Какие есть косяки:
    • Перебираете вложенные узлы, но замену выполняете у того, что передан в функцию.
    • Заменять содержимое надо только у текстовых узлов - чтобы проверить тип, смотрим nodeType.
    • У текстовых узлов нет innerText. Есть textContent и nodeValue.
    • Зачем функции знать заранее, что за замена должна быть выполнена? Что будете делать, если понадобится выполнить другую замену - закопипастите функцию, заменив регулярку? Лучше добавим второй параметр - функцию, принимающую текущий текст и возвращающую новый.

    Исправляем:

    function replaceText(node, replacer) {
      if (node.nodeType === Node.ELEMENT_NODE) {
        node.childNodes.forEach(n => replaceText(n, replacer));
      } else if (node.nodeType === Node.TEXT_NODE) {
        node.textContent = replacer(node.textContent);
      }
    }
    
    
    replaceText(document.body, str => str.replace(/\d/g, 'hello, world!!'));

    Или, долой рекурсию и проверки типов узлов, можно сразу текстовые перебирать:

    function replaceText(node, replacer) {
      const iter = document.createNodeIterator(node, NodeFilter.SHOW_TEXT);
    
      for (let n = null; n = iter.nextNode();) {
        n.nodeValue = replacer(n.nodeValue);
      }
    }
    Ответ написан
    Комментировать
  • Как разбить массив на несколько по уникальности значения ключа объекта?

    Seasle
    @Seasle Куратор тега JavaScript
    arr.reduce((acc, x) => ((acc[x.i] ??= []).push(x), acc), {})
    Ответ написан
    Комментировать
  • Как произвести слияние массив объектов с другим массивом объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const merge = (...arrs) =>
      Array.from(
        { length: Math.max(...arrs.map(n => n.length)) },
        (_, i) => Object.assign({}, ...arrs.map(n => n[i]))
      );
    
    
    const arr = merge(arr1, arr2);

    или

    const merge = (...arrs) =>
      arrs.reduce((acc, n) => (
        n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
        acc
      ), []);
    Ответ написан
    1 комментарий
  • Какой должен быть Git у начинающего разработчика?

    bingo347
    @bingo347
    Crazy on performance...
    Проект(ы) могут быть любым(и). Главное чтоб в них была именно Ваша работа.

    Смотреть будут:
    1. качество кода
    2. как оформляете коммиты
    3. есть ли развитие во времени
    4. есть ли в проекте конфиги вспомогательных тулов

    Но надо помнить, что если нечего показывать, то лучше вообще не упоминать github в резюме. Вот то, с чем сам сталкивался и что прямо отталкивало, когда кандидат указывает в резюме гитхаб:
    - только форки популярных проектов, без единого коммита от владельца репозитория
    - несколько проектов, но все как под одну гребенку: 1 коммит - стандартный шаблон гитхаба, 2 коммит - залил весь проект целиком
    Ответ написан
    Комментировать
  • Уместны ли каверзные вопросы на собеседовании?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Странный вопрос.
    На собеседовании все уместно. Ты же не забывай, что собеседование это не ЕГЕ.
    Это диалог двух сторон. Если кандидату не понравился вопрос, он может встать и уйти.
    Если он не знает ответ, он может что-то насочинять, и если ты грамотный специалист ты увидишь что он тут отгадывает или точно знает.

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

    Поэтому и вопросы, которые могут касаться глубоких нюансов задавать можно не каждому подряд, а когда хочешь уточнить насколько глубока кроличья нора. Поставь перед сложным вопросом один попроще в эту тему и смотри имеет ли смысл задавать более сложный. Ну и глобально стоит оценивать, насколько правильный ответ на эту тему важен - бывает что просто не приходилось с таким сталкиваться и разбираться, но при случае там реально сразу гуглится ответ, и знать такое наизусть не обязательно
    Ответ написан
    2 комментария
  • На каком ЯП стоит писать программу для управления компьютерным клубом (десктоп)?

    Совершенно не имеет разницы на чём это делать.

    Тут у тебя по сути две (или три) части:
    1. Пользовательский интерфейс, где можно кнопочки нажимать и посылать какие-то команды (типа разблокировать комп №42 на 3 часа)
    2. Некоторая система, которая будет непосредственно эти команды реализовывать.
    3. Возможно, ещё какая-нибудь финансовая система, чтобы ещё деньги считать и чеки печатать.

    Все три могут быть как частями одной программы, написанной на одном языке, так и несколькими независимыми программами (написанными, возможно, на разных языах), которые между собой общаются через какой-нибудь сетевой протокол (например по HTTP).

    Самое сложное (не понятное) - это вторая, и она даже может состоять из нескольких частей (например сервер, который всем управляет и агент на управляемом компьютере)

    Пользовательский интерфейс может быть написан решительно на чём угодно - это может быть даже сайт, который будет через http обращаться к серверу, а может быть и привычный для тебя Windows Forms

    На текущем этапе тебе надо выяснить, каким образом ты можешь управлять компьютерами удалённо и более-менее, чтобы пользователь ничего не мог поделать, а потом решить, на чём тебе это проще будет реализовать.
    Ответ написан
    1 комментарий
  • Почему складывается не строки, а числа?

    Код у тебя, конечно, ужас.
    Вместо того чтобы складывать/умножать на innerHTML тебе нужно преобразовывать его в число.
    Например при помощи функции parseInt
    Ответ написан
    Комментировать
  • Как вывести данные из json на страницу?

    Big_Trouble
    @Big_Trouble
    Программист недосамоучка
    Вместо main json создаете файл main.js и экспортируете по умолчанию (default) объект с полями title, subtitle.

    // main.js
    
    export default {
        title: "sun",
        subtitle: "earth",
        r: "mars"
    }

    <h1></h1>
    <h2></h2>
    <p></p>


    //index.js
    import data from './main.js';
    
    // Пишем функцию, чтобы не менять каждый элемент вручную
    const changeHtmlText = (querySelector, data) => {
        const $element = document.querySelector(querySelector);
        
        $element.textContent = data
    }
    changeHtmlText("h1", data.title);
    changeHtmlText("h2", data.subtitle);
    changeHtmlText("p", data.r);
    Ответ написан
    Комментировать
  • Словарь для брута rar архива возможно сделать через Блокнот?

    @Ledauph1
    Я только учусь, не пинайте строго.
    Вы создали словарь с 84 строками (значениями), то есть программа перебрала 84 значения с вашего словаря, не составляя комбинаций.
    Для создания словаря можно использовать программу Dictionary Generator Либо написать скрипт, который создаст список всевозможных комбинаций. Так же в некоторых программах для подбора пароля к архиву есть инструменты для создания словарей.
    Ответ написан
    1 комментарий
  • Как семантически верно оформить список статей в категории блога?

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    section должен содержать в себе заголовок 1-2 уровня.
    section представляет собой какой-то блок, объдиняющий по смыслу какую-то информацию.

    Соответственно, я бы отклонил оба варианта.
    Делать внутри article section имеем смысл если их там больше 1.
    Не делать section вообще - значит не дать контекста что это за набор article.

    Я бы предложил вариант:
    main
      section
        заголовок
        article
          заголовок
          описание
          ссылка
        article
          заголовок
          описание
          ссылка
    Ответ написан
    1 комментарий
  • Как создать обственные BB коды на сайт или форум?

    @ksnk
    Простейший вариант - заменять [CODE] на < pre > и закрывающий [/CODE] на < /pre>. Это не то, что нужно в этом месте ? Чтобы не задумываться о непарных тегах - можно менять регуляркой
    $text=preg_replace('~\[CODE\](.*?)\[/CODE\]~si', '<pre>$1</pre>',$text);

    Если, внезапно, захочется что-то более навороченного - можно посмотреть ответ nokimaro
    Ответ написан
    Комментировать