• Как сравнить два многомерных массива?

    zendor
    @zendor
    Final UPD (если я все правильно понял):
    const results = year.map(inner =>
      years.reduce((a, c) => a.concat(c.filter((v, i) => v == inner[i]).length > 1 ? [c] : []), []));

    Для каждого массива в year выводятся совпадения в отдельном массиве.
    Ответ написан
  • Несколько промисов в коде?

    rockon404
    @rockon404
    Frontend Developer
    Потому что правильно это делается так:
    const resolve = () => console.log('resolve');
    const reject = () => console.log('reject');
    
    
    const promise2 = () => new Promise((resolve, reject) => {	
    
      console.log ('promise2');
      const zn = prompt ('digit');
    
      if (zn > 9) {
        resolve() 
      }
      else {
        reject();
      }
    
    });
      
    
    const myInnerServerTalk = () => new Promise((resolve, reject) => {
    
      console.log (' myInnerServerTalk');
      const zn = prompt ('digit');
    
      if (zn > 9) {
        resolve() 
      }
      else {
        reject();
      }
    
    });
      
    myInnerServerTalk().then(resolve).catch(reject);

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

    @kofon
    Я человек
    Ещё можно тебе голову сломать вот этим:
    function getFunction(name){
      if (!name) return function(){ return "Who are you?" }
      else       return function(){ return "Hello " + name; }
    }
    
    // Вызов
    var petya   = getFunction("Петя");
    var unknown = getFunction();
    
    petya();  // петя
    unknown;  // тИ кто???


    Объяснение нужно? Если что, объясню!
    Ответ написан
  • Что нужно иметь и знать в фреймворке React джуну?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Хороший кандидат на должность Junior React Developer, по моему мнению, должен соответствовать следующему перечню требований:
    1. Хорошее знание JavaScript. В React разработке используется ES6 и большинство экспериментальных фич еще не вошедших в стандарт.
    2. Хорошее знание HTML и CSS. Кроссбраузерная верстка. Так же, хорошо иметь представление о том, что такое css-in-js.
    3. Web APIs. Умение работать с объектной моделью документа(DOM) и все эти XMLHttpRequest, localstorage, cookie, history и прочее.
    4. Хорошее знание API React. Вы должны хорошо знать React, знать его возможности, понимать основные концепции и уметь ответить на большинство типовых вопросов. Для этого достаточно хорошо изучить документацию, разобрать пару типовых проектов на github и попрактиковаться. Много полезной информации, приёмов и идей можно подчерпнуть из тематических статей и докладов. Так же, на просторах интернета можно найти подборки типовых вопросов, часто задаваемых на собеседованиях. В англоязычном сегменте их больше.
    5. Redux. Уверенное знание API. API библиотеки до боли пост. Знать, что такое промежуточное ПО и зачем оно. Понимать базовые концепции архитектуры Flux. Все это есть в документации и многочисленных курсах.
    6. Умение работать с менеджером пакетов npm на базовом уровне.
    7. Node.js. Хотя бы уметь написать простейший express/koa сервер, который будет отдавать ваше приложение и статику.
    8. Webpack. Базовые знания.
    9. Умение работать с git. Хотя бы знать и уметь примерять команды: init, clone, add, commit, push, pull, merge, checkout.
    10. Иммутабельность. Четкое понимание зачем это надо. Знание приемов иммутабельного изменения структур данных. Это есть в официальном туториале React.
    11. Статическая типизация TypeScrpt/Flow. Для начала хватит самых основ и способности понимать чужой код.
    12. Функциональное программирование. Хватит знаний полученных в процессе изучения JavaScript, а так же не помешает знать, что такое каррирование, чистые функции и рекурсия.
    13. Базовые концепции ООП. Хватит знаний полученных в рамках изучения JavaScript.
    14. Асинхронный код. Понимать как его правильно организовывать. Promise, async/await.
    15. Сетевые протоколы передачи данных. Вполне хватит базовых знаний о http/https, о том, что такое заголовки и какие они бывают. Хорошо знать о том, что такое websocket.
    16. За плечами должен быть хотя бы один учебный проект на React. Хватит типового тестового задания.
    Примеры таких заданий: 1, 2, 3(сайт может быть не доступен на территории РФ, советую отрыть через VPN и посмотреть), 4, 5. Если подобного проекта у вас нет, то будьте готовы, что потенциальный работодатель предложит вам выполнить тестовое задание и только по его результату вас, может быть, пригласят на техническое интервью. Если напишите хорошо, вас скорей всего пригласят.
    17. Желателен опыт создания типовых UI элементов. Например, чтобы не вызывало трудностей написать простой кастомный чекбокс. Куча примеров реализаций типовых элементов есть на codepen.

    Это не красный минимум знаний и во многих компаниях требования могут быть значительно ниже. Но соответствие вышеперечисленым пунктам будет хорошим аргументом для работодателя остановить свой выбор именно на вашей кандидатуре.

    Похожий вопрос.
    Ответ написан
    18 комментариев
  • Как это работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Массив всяких строк, которые являются названиями методов некоторых объектов в JavaScript. Но в приведенном фрагменте кода это не имеет никакого значения, т.к. они не выполняются.

    Объявляется анонимная функция, которая тут же и вызывается. В неё параметрами передают этот массив и число 185, записанное в 16-ричной системе как 0xB9.

    Внутри функции объявляется ещё одна функция e(f), ожидающая целочисленный параметр f.

    Цикл while выполняется пока это число f не достигнет нуля, уменьшаясь на 1 на каждой итерации.

    Внутри цикла вызывается метод массива push(), который вставит в конец массива значение. К свойствам и методам объекта можно обращаться и через точку myArray.push() и в квадратных скобках передав строку с названием свойства или метода: myArray['push']()

    Вставляется в массив значение, вынутое из него же, из самого начала. Выдёргивается оно методом массива shift() – записанным так же в виде строки в квадратных скобках.

    Вызывается функция e() с числом 185, увеличенным на 1, т.е. 186. В цикле это число сначала уменьшается на 1, затем оценивается, не стало ли оно равным нулю. Если ещё не стало, то выполняется тело цикла. Т.е. тело цикла выполнится 185 раз: для 185, 184, 183, ... 2 и 1.

    Вся эта конструкция сдвинет содержимое массива на какое-то число позиций, зависящее от его длины.
    Ответ написан
    1 комментарий
  • Mobile First или разделение стилей?

    web_Developer_Victor
    @web_Developer_Victor
    Что такое google?
    Суть в том, что мобильные устройства более слабые, чем компьютеры и когда вы делаете по медиа запросам, то телефону нужно сначала отобразить desktop версию, а потом ещё и медиа запроси. А когда вы делаете по принципу mobile first, то телефону нужно отобразить только одну страничку, без медиа запросов, а компьютеры с этим и так справляется
    Ответ написан
    2 комментария
  • В какой последовательности изучать JavaScript?

    sim3x
    @sim3x
    JavaScript 
      Gulp && WebPack
      Angular || Vue.js || React.js 
      postgresql
      Node.js
      ? JQUERY
      ? mongodb
    Ответ написан
    14 комментариев
  • Под какие основыные размеры настраивать CSS @media screen?

    hector2009
    @hector2009
    Frontend Developer
    Всегда использую эти( это старые брэйкпоинты bootstrap по умолчанию ):

    /* Large desktops and laptops */
    media (min-width: 1200px) {

    }

    /* Portrait tablets and medium desktops */
    media (min-width: 992px) and (max-width: 1199px) {

    }

    /* Portrait tablets and small desktops */
    media (min-width: 768px) and (max-width: 991px) {

    }

    /* Landscape phones and portrait tablets */
    media (max-width: 767px) {

    }

    /* Landscape phones and smaller */
    media (max-width: 480px) {

    }

    По надобности дописую промежуточные разрешения, если вдруг по дизайну что то падает на 650px, тогда дописую:

    media (max-width: 650) {

    }
    Ответ написан
    2 комментария
  • Чем отличается npm init от npm install?

    boratsagdiev
    @boratsagdiev
    npm init задаёт вам разные вопросы и создает package.json, который определяет настройки проекта, зависимости, скрипты, название и прочее.
    npm install [module] устанавливает модуль с именем module.

    То есть, чтобы начать работу, сначала вам нужно сделать npm init (можно с опцией --yes, которая установит на все вопросы дефолтные ответы), а потом уже устанавливать модули командой npm install
    Ответ написан
    9 комментариев
  • Верстка с нуля: какие основные этапы работы?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Использую vscode+webpack+pug+scss+бэм. Из физических инструментов, основной моник: lg ultrawide 29um69g, рядом прикручен моник от ноутбука повешенный вертикально, подключенный через универсальный скаллер.

    0) Запускаю Spotify :-)

    1) Произвожу установку всех необходимых модулей для сборки. В моем случае у меня набор конфигураций для webpack (отдельные файлы для pug, scss, static и.т.д., выбираю что нужно).

    2) Запускаю avocode, загружаю в него макет. Определяю в нем переменные (в то же время записываю их, чтобы сразу кинуть в scss файл) для цветов, размеров шрифтов и.т.д. чтобы при получении кусочков кода из него, он сразу расставлял переменные.

    3) Запускаю VS Code, открываю нужную папку.

    4) Пишу размету на Pug. Пишу с БЭМ, если встречаю повторяющийся блок, то открываю файл _mixins.pug, в который пишу миксины для повторяющихся блоков, например товаров, пунктов меню, каких-то блоков и.т.д. Pug умеет делать циклы, это ускоряет сильно.

    5) Когда HTML готов, начинаю делать каркас. Если дизайн сделан по сетке, определяю контейнеры, колонки, строки в свои классы (не пишу в html тучи классов аля col-md-6, а пишу в SCSS инклуды в нужные мне блоки, типа @include make-col(2) и.т.д.).

    6) Экспортирую картинки из Avocode. Очень делается просто, указываю папку и просто кликаю экспорт и ввожу название файла и расширения. Преимущественно для иконок использую svg, если нет svg, то ищу эту иконку в интернете (дизайнеры редко рисуют иконки сами, но зато любят вставлять их не в векторе). Если иконка простая, могу сам ее в inkscape обвести, ну и если нет, то экспортирую png в размере (благо авокод это позволяет, если конечно дизайнер не вставил в исходном маленьком размере). Когда есть контакт с дизайнером, трясу его, ибо растр это плохо для иконок.

    7) Пишу стили блоков из страницы. На этом этапе можно на втором монике параллельно смотреть футураму или
    Арчера :-) Но чаще на широком монике слева браузер, справа VS Code, а на втором монике Avocode (может меняться местами с браузером). Мысленно нарезаю страницу на блоки. Для каждого блока (БЭМ) создаю отдельный scss файл (кто-то даже для элемента создает, но мне лень), из него сразу выписываю все селекторы. Иногда могу сначала выписать все селекторы со страницы (но так лучше не делать, т.к. во время работы может потребоваться изменить что-то в разметке), но чаще для одного блока выполняю этот пункт и за ним сразу выполняю пункт 8, потом для нового блока опять 7 и 8 и.т.д.

    8) Пишу css код вместе с Avocode, у него беру нужные мне параметры (а он уже подставил в них переменные), и вставляю в мой код. И параллельно сверяю со скрином макета используя вот это расширение https://chrome.google.com/webstore/detail/perfectp...

    9) Пишу адаптив. Я не могу привыкнуть к методологии mobile-first, поэтому пишу всегда сначала полную версию сайта. Я понимаю, что это чревато всякими проблемами и это типа не модно, но мне норм.

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

    11) Добавляю анимашки. Даже если заказчик не просил отдельно (и если не указал отдельно, что нельзя), он все равно будет доволен, а с animate.css+onscreen.js это вообще работа 10 минут. Сложные анимации обговариваю отдельно, чтобы не сделать ненужную работу.

    11) Все снова сверяю, пишу скрипты где надо. Для слайдеров в 99% случаев подходит slick (с доработками конечно, но там хорошее API), для других случаев могу написать свой.

    12) Сдаю заказчику и жду ответа сидя на тостере/пикабу.

    Это чисто мой опыт, опыт фрилансера, не знаю, как делают другие и не могу на 100% утверждать что это 100% правильный способ. Я так и не смог заставить свой конфиг webpack правильно вставлять спрайты svg.
    Надеюсь чем-то поможет мой ответ.
    Ответ написан
    7 комментариев
  • Как обычно проводятся тесты на фронтенде?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Основа по тестированию есть у Кантора: learn.javascript.ru/testing
    По реакту есть хороший курс на udemy (EN) https://www.udemy.com/react-tdd (10$)
    По redux текстом в доках - https://redux.js.org/recipes/writing-tests
    На хабре полно информации. Ну и как вам уже написали - в гугле миллион ссылок.
    Ответ написан
    3 комментария
  • Как правильно делать дизайн и верстать под retina дисплей?

    sashock
    @sashock
    UX/UI Designer
    Дизайнер накосячил — нарисовал макет сайта под ретину. Весь веб должен рисоваться под обычное разрешение и только специальная графика (если нужно): иконки, иллюстрации рисуются либо в двух разрешениях (обычном и 2x) либо сразу в SVG. Ну и выше уже ответили, в зависимости от типа экрана в верстке подсовывать соотв. графику.
    Ответ написан
    1 комментарий
  • Что такое анонимная функция и с чем ее едят?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    На самом деле классика случая анонимной+замыкание:
    var name="admin"
        
        setTimeout(function(){
            alert(name);
        },1000);


    А анонимная функция без имени, а без имени она потому что ее вызывают не по имени, а по ссылке на нее.
    т.е полный пример с замыканием:

    function sayAfter(text,delay){  
        setTimeout(function(){
            alert(text);
        },delay);
       }
    
      sayAfter("lol",1000);


    Аудитория требует более тонкого примера применения...

    (function(){
            var x, y, z;
    
            //много разного кода, много переменных, которые не нужны в глобальной области видимости
        })();
    Ответ написан
    8 комментариев
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Как подружить Git вместе с SublimeText 3?

    @Vladisus
    https://sublimegit.net
    Если есть Package control:
    Preferences ---> Package control ---> Install package ---> SublimeGit, еcли нет
    https://packagecontrol.io/installation ---> Preferences ---> Package control ---> Install package ---> SublimeGit
    Вот доки
    Ответ написан
    Комментировать
  • Как сделать переводчик на «хакерский язык»?

    Stalker_RED
    @Stalker_RED
    var input = "javascript is awesome leet";
    var output = "";
    for (let i = 0; i<input.length; i++) {
      let symbol = input[i]
      switch (symbol) {
        case 'a': output += '4'; break;
        case 'e': output += '3'; break;
        case 'i': output += '1'; break;
        case 'o': output += '0'; break;
        case 't': output += '7'; break;
        default: output += symbol;
      }
    }
    console.log(output)
    https://jsfiddle.net/z9o7fg8a/
    Если вы еще не знакомы с конструкцией switch, можно заменить на серию if-else

    Хотя я бы писал как-то так:
    var input = "javascript is awesome leet";
    var replaceList = {
    	'a': 4,
      'e': 3,
      'i': 1,
      'o': 0,
      't': 7,
    }
    
    var output = input.split('').map(s => replaceList[s] || s).join('')
    console.log(output)
    https://jsfiddle.net/z9o7fg8a/1/

    А вообще, какой смысл в обучении, если задачки за вас решает кто-то другой?
    Ответ написан
    3 комментария
  • Полноценный пример SSR для react/redux?

    Да состояние собирается на сервере для каждого клиента (request'a), скажем на уровне мидлвара мы собираем состояние (текущего авторизованного пользователя, какие-то другие глобальные данные), далее отрабатывает обработчик маршрута, мы получили данные какой-то страницы из бд и передали их как контекст, примерно так:
    import React from 'react';
    import { StaticRouter } from 'react-router'
    import { Provider } from 'react-redux'
    import ReactDOMServer from 'react-dom/server';
    
    import App from './client/components/App.jsx'
    
    ReactDOMServer.renderToString(
    	<Provider store={ReduxStore}>
    		<StaticRouter
    			location={Url}
    			context={Context}>
    			<App/>
    		</StaticRouter>
    	</Provider>
    );

    Где, ReduxStore сгенерированное нами глобальное состояние (redux) запроса, Url запрошенный урл, Context контекст (будет передано как this.props.staticContext в компонент). Реакт вытянет нужный контейнер роута (по вашим маршрутам в App) и передаст ему контекст, компонент рендерится исходя из полученных данных. Результатом работы метода renderToString будет html строка (размеченная реактом), которую мы шаблонизатором или как угодно впиливаем в блок моунта компонента (в верстке), дополнительно в шаблонизатор передаем сгенерированное состояние, в документации выглядит вот так:
    window.__PRELOADED_STATE__ = JSON.stringify(preloadedState || {}).replace(/</g, '\\u003c')

    Теперь что происходит после того как страница загрузилась и подхватились клиент-скрипты? Все просто мы подхватываем состояние из window.__PRELOADED_STATE__ и вообщем-то все, глобальное состояние передано, компонент уже отрендерен, стоит учитывать что результаты при клиент-рендере и при сервер-рендере должны быть всегда одинаковыми, так же не использовать методы доступные браузеру, но не доступные серверу (на уровне моунта и первого рендера) и хорошенько следить за своим кодом в плане памяти, иначе при какой-либо утечке, память на сервере не будет вычищаться после каждого рендера.
    ---
    Как-то так, надеюсь помог, хотя там еще довольно много заковык
    Ответ написан
    20 комментариев
  • Особенности верстки под angular js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    компоненты, BEM... Словом идея в том что бы минимизировать каскады и раздробить все на как можно более независимые UI компоненты. Словом адекватная верстка.
    Ответ написан
    1 комментарий