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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    в obj скорее всего промис, соответственно весь остальной код надо на асинхронный лад переписать
    Ответ написан
    Комментировать
  • Что нужно делать на практике в JavaScript, чтобы его понимать?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    В JS главное понять что он однопоточный и асинхронный. Пока ты мыслишь синхронно, будешь постоянно наступать на грабли. Как только разберешься с асинхронностью и начнешь думать асинхронно, все остальное приложится.
    Ответ написан
    Комментировать
  • Какие паттерны существуют для отрисовки ui?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я как-то писал форму на 300 полей с конфигуратором, тоже всю структура в JSON бахнул, на каждый элемент шаблончик и скриптами собирал страницы.
    Ответ написан
    2 комментария
  • Действительно ли reduce, filter, map и прочие работают медленнее обычного for?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Методы массивов на вход получаются коллбек, потом его вызывают, получают обратно значения.

    Многие из коллбеков создают и заполняют новый массив. Это всё накладные расходы.
    Ответ написан
    Комментировать
  • Как вам такое решение задачки?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Ой намудрили коллеги. :) Все очень просто, если сортирнуть... :) Если не сортировать, то меньше итераций особо не получится, поэтому таки сортируем и не паримся. :)

    const rangeIt = data => {
      const a = [...data].sort((a, b) => a-b), r = [[a[0], a[0]]];
      for (i = 1; i < a.length; i++) {
        if (r[r.length - 1][1] + 1 === a[i]) {
          r[r.length - 1][1] = a[i];
        } else {
          r.push([a[i], a[i]]);
        }
      }
      return r.map(rr => rr[0] === rr[1] ? rr[0] : rr.join('-')).join(', ');
    }


    вот как-то так :)

    const rangeIt = data => {
      const a = [...data].sort((a, b) => a - b), r = [[a[0], a[0]]];
      const calcRanges = (n, i) => {
        if (!i) return;
        if (r[r.length - 1][1] + 1 === n) {
          r[r.length - 1][1] = n;
        } else {
          r.push([n, n]);
        }
      };
      a.forEach(calcRanges);
      return r.map(rr => rr[0] === rr[1] ? rr[0] : rr.join('-')).join(', ');
    }


    или так
    Ответ написан
    Комментировать
  • Где можно найти живой проект для практической работы?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Вот явился джентльмен с горы, уверяет, что осваивает несколько месяцев. В целом это хорошо.

    Какой у джентльмена уровень, в целом не понятно, но сразу хочется в проект. В целом для джентльмена это хорошо, а для проекта? Не факт.

    Коллеги рекомендуют опенсорс, в целом идея здравая, но, тут возможны два варианта. Либо джентльмен будет полезен для проекта, я бы на это поставил, скажем, 5% вероятность. Либо джентльмен будет отнимать время у разработчиков проекта всевозможными способами, на что я бы поставил 95% вероятности. Дело в том, что многие опенсор проекты держатся на энтузиазме авторов, и если авторы будут энтузиазм тратить на обучение джентльменов, не факт что проекты с этого выиграют...

    Что делать и как быть?

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

    А если нет и это самый первый опыт, то джентльмену слишком рано рваться в проекты и команды.

    По моему очень скромному опыту изучать фронтед можно очень по разному.

    Я бы, по классике, предложил джентльмену проследовать на кодварс (www.codewars.com/r/pj8ELg) и прорешать, скажем 100, а лучше 200 задачек. После этого можно будет со спокойной совестью говорить, что я кое-что знаю и умею в этом вашем программировании. Ключевое слово, опять же, кое-что.

    Многие гуру считают сие излишним, ниже собственного достоинства. Но я бы с ними категорически не согласился. Учиться программировать нужно на практике и весьма интенсивно (ключевое слово ИНТЕНСИВНО!). Именно тупо программировать, манипулировать данными посредством всевозможных алгоритмов, перед тем поняв суть задания и найдя варианты решения. Это универсальные, золотые, для разработчика навыки, которые иначе будут вырабатываться годами ценой тысяч ошибок, потерь чужого времени и прочих ресурсов (если таковой загремит на проект). А здесь за вас работает автоматика.

    Фронт и веб это хорошо, но сначала надо уметь просто программировать на чем угодно, хоть на калькуляторе.
    Ответ написан
    4 комментария
  • Какая разница между этими записями в JS?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    setTimeout ожидает первым аргументом функцию, которую он вызовет когда-то (когда пройдет заданный интервал), в первом случае вызов производится сразу в месте объявления.
    Ответ написан
    Комментировать
  • Как правильно выбрать значения из массива?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    slice, filter, reduce ?
    Ответ написан
    Комментировать
  • Непонятки с циклом на js?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Ну в pipe есть 1 элемент, стало быть длина = 1, стало быть цикл 1 раз крутанётся...
    Ответ написан
    Комментировать
  • Ответьте, пожалуйста, на вопросы по ES6?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Ох, сдается мне пока рано всё это обсуждать. Есть у меня ощущение, что критическая масса практики еще не накоплена, шишки не набиты, грабли не собраны, говорить пока не о чем...
    Ответ написан
    Комментировать
  • Почему не срабатывает валидация?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    потому что обработчик сабмита на onSubmit тега формы надо вешать и там уже валидацию производить
    Ответ написан
    Комментировать
  • Как найти соответствие ключ-значение = значение ключ в массиве?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Для начала не бывает таких структур данных в JS.

    const findDupes = data => {
      const tmp = data.reduce((a, e) => {
        const ee = Object.entries(e).pop();
        const keys = [`${ee[0]}_${ee[1]}`, `${ee[1]}_${ee[0]}`];
        if (!a[keys[0]]) a[keys[0]] = { e, s: [] };
        if (a[keys[1]]) a[keys[1]].s.push(e);
        return a;
      }, {})
    
      return Object.entries(tmp).filter(e => e[1].s.length > 0).map(e => e[1].e);
    }
    
    console.log(findDupes(data));


    Вот как-то так я это вижу. На вход надо подавать массив объектов типа такого:

    const data = [{ 21: 31 }, { 22: 14 }, ...];

    ЗЫ: Код может работать не совсем корректно, если важен порядок детектирования элементов.
    Ответ написан
    Комментировать
  • Изучение JavaScript в 2019?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Не надо тебе книг. Программирование - это структуры данных и алгоритмы, поэтому нужно решать овердофига олимпиадных задачек по информатике, иначе тебе ни одна книга не поможет решать реальные задачи. Так-что иди на кодварс и начинай решать задачки, и, параллельно, будешь потихоньку подтягивать синтаксис и API языка, но не наоборот, потому что память работает так, что не запомнишь ты ничего толком, пока не станешь это активно применять на практике. Т.е. впрок книжки читать бесполезно.
    Ответ написан
    2 комментария
  • Как систематизировать изучение JS?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Существенные грабли, которые очень важно осознать - PHP синхронный, в целом, язык, а JS, в целом, асинхронный. Поэтому тут многие подходы из PHP либо работают плохо, либо не работают вообще.

    Чтобы эффективно писать на JS нужно осознать прелести функционального и асинхронного подхода, научиться мыслить коллбеками и не гадить в глобальное пространство.

    Еще нужно осознать, что в JS всё (ну или почти всё) есть объект, а, так же, как работает прототипное наследование и замыкания, как работает так называемый Event Loop в совокупности с Call Stack.

    Научиться мыслить цепочками вызовов т.к. многие методы в JS поддерживают chaining. Например
    const s = '1234567890';
    const onlyEvens = s.split('').filter(e => (+e % 2) !== 0).join('');


    или даже так

    const onlyEvens = '1234567890'.split('').filter(e => (+e % 2) !== 0).join('');


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

    Вообще мне хорошо мозги на место поставил курс по ES v5 Javascript: Understanding Weird Parts ну или примерно то же самое но на русском у ZORAX. У Кантора тоже все великолепно разложено по полочкам, но он просто жесть какой нудный (имхо).

    А потом просто очень много практики, лично я тупо решал всё подряд на кодварс.

    А еще чтобы лучше что-то понять, начни объяснять это другим. :) Я так однажды замыкания объяснил кому-то, что аж сам понял... :D

    P.S.: Раз ты говоришь что у тебя есть опыт в программировании, возможно тебе будет не актуально, но я все равно скажу, т.к. всегда говорю это - алгоритмы и структуры данных, без них никуда, от слова совсем.
    Ответ написан
    Комментировать
  • Как сделать поиск на сайте через несколько select'ов?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Все возможные комбинации сгенерировать предварительно и в виде скрытых стилями ссылок разместить на странице, показывать нужную при выборе чего-либо.
    Ответ написан
    Комментировать
  • Какой хороший курс по JS (для среднего уровня)?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    https://www.youtube.com/watch?v=bzuelEN1Kg8&list=P... вот это дело мозг хорошо поставило на место по части ES5, Еще зоракса послушай. learn.javascript.ru хорош, но нудноват...
    Ответ написан
    2 комментария
  • Как реализовать постоянную взаимосвязь ajax+php не перегружая сервер?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Как уже выше коллеги писали, websockets (что на пыхе нетривиально реализовать), на худой конец longpolling (что вполне реально, но это костыль в почти 19 году).
    Ответ написан
    Комментировать
  • Что скажете о данном коде? Каков мой уровень?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Качай алгоритмы и структуры данных. Не важно на каком языке ты пишешь, без этого в профессии делать нечего. Прорешай овер100500 задачек олимпиадных, выведи эти навыки на рефлексы и тогда будет тебе щасте, ибо всё остальное, чаще всего, нужно просто запомнить и привыкнуть.
    Ответ написан
    Комментировать
  • Что значит и как перевести на русский tree shaking?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Когда плоды/листья утрачивают связь с деревом, дерево трясут - плоды падают, дерево остается...

    Любой код можно представить в виде дерева вызовов.

    В бандл попадает код (например части библиотек/пакетов), который никак не связан с полезным кодом, занимает место но никогда не вызывается, таким образом с деревом кода не связан. Tree shaking помогает устранить такой код, оставив в бандле только то, что реально работает.

    Вот например ты потянул здоровенную библиотеку в проект ради пару-тройки функций, а остальные дцать мегабайт просто лежат и вообще ничего не делают. Вот tree shaking, по идее, при сборке бандла эти мегабайты отбросит, оставит только то, что реально вызывается и приносит пользу...
    Ответ написан
    Комментировать
  • Как проверить, что знаешь на базовом уровне JavaScript?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Зачастую об этом умалчивают, считают как бы само собой разумеющимся, но кроме знаний собственно языка надо еще уметь выстраивать и реализовывать алгоритмы, отрабатывать структуры данных, и владеть еще огромной кучей сопричастных знаний и навыков.

    Нарабатывается это добро исключительно только практикой, через проработку многих сотен и тысяч ситуаций (кейсов), как бы накапливаются микро-решения, из которых потом уже, как из кубиков лего, формируются большие и сложные решения. Разумеется руку при этом постоянно приходится держать на горах документации.

    Если ты знаешь команды JS, можешь рассказать о прототипном наследовании, замыканиях и пр., но не знаешь как работает DOM, Event loop, каррирование и пр. то как бы нет, ты не знаешь языка в должной мере.

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

    Вангую что очень часто будет непонятно почему и для чего делается так и эдак, а что делать, чтобы стало понятно, читай выше...
    Ответ написан
    7 комментариев