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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Составить массив id, которые нужно исключить
    const excludeIds = defaultCass.map(item => item.id);


    Затем отфильтровать, оставив только те, чей id отсутствует в excludeIds
    const result = allCass.filter(item => !excludeIds.includes(item.id));
    Ответ написан
    Комментировать
  • Как из двух массивов получить те объекты, которые есть в одном и отсутствуют в другом?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Делаем просто, ровно то, что спрошено в вопросе:

    const result = allCass.filter(function(n) {
      return !this.has(n.id);
    }, new Set(defaultCass.map(n => n.id)));

    Делаем сложно, решаем задачу в более общем виде (источником данных могут быть не обязательно массивы; условие, по которому значения признаются равными, не будем зашивать непосредственно в код - будет параметром функции):

    function* diff(data1, data2, key = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const keys = new Set;
    
      for (const n of data2) {
        keys.add(getKey(n));
      }
    
      for (const n of data1) {
        if (!keys.has(getKey(n))) {
          yield n;
        }
      }
    }

    В вашем случае применять так:

    const result = [...diff(allCass, defaultCass, 'id')];

    А можно и так:

    Array.from(diff('abcdE', 'AcD', n => n.toLowerCase())) // ['b', 'E']

    Или так:

    for (const n of diff(Array(8).keys(), Array(5).keys())) {
      console.log(n); // 5 6 7
    }
    Ответ написан
    6 комментариев
  • В чем разница в этих двух способах записи стилей?

    Aetae
    @Aetae
    Тлен
    Подозреваю в img какой-то мусор прилетает, что и отрубает остальную часть записи. В остальном никакой разницы. Ну разве что background перезаписывает все остальные свойства(даже те что не указаны, т.е. если был задан background-color - он станет по умолчанию, т.е. прозрачным).
    Ответ написан
    4 комментария
  • Не работает метод filter, что не так?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Всё так, всё работает. Между "не работает" и "работает не так, как я задумал" есть существенная разница, попытайтесь её осознать.

    Во-первых, чтобы результирующий массив был непустым, надо, как минимум, из коллбека фильтрации что-то возвращать. При использовании map'а - тоже. Кстати, а зачем map? Непонятно. Возможно, вместо него нужен some.

    Во-вторых - в dataset лежат строки, сравниваете их вы с числами. Без приведения типов. Очевидно, что результаты подобных проверок всегда будут ложными.
    Ответ написан
    4 комментария
  • Почему частицы на canvas сходят с ума от прозрачного фона?

    ProjectSoft
    @ProjectSoft
    Front-end && Back-end разработчик
    //background fill
    context.clearRect(0,0,displayWidth,displayHeight);
    context.fillStyle = "rgba(0,0,0,0)";
    context.fillRect(0,0,displayWidth,displayHeight);

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

    Seasle
    @Seasle Куратор тега JavaScript
    Существует шум Перлина (Perlin Noise, Simplex Noise 2D), возвращающий числа в интервале [0; 1], либо в интервале [-1; 1], в зависимости от реализации. Если найдете ту, которая возвращает числа в интервале [-1; 1], тогда превращаете в интервал [0; 1] (полученное число делите на 2 и прибавляете 0.5) и умножаете на некий коэффициент.
    Ответ написан
    Комментировать
  • Как запретить множества кликов в кнопке?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Очевидно, что сразу после нажатия кнопки вам нужно заблокировать или его или обработчик и ждать пока не придет ответ от сервера, только после этого разблокируете все обратно.
    Ответ написан
    Комментировать
  • Где искать красивые темы для консоли?

    @lmrtre
    Крайне удобный инструмент для смены тем -- Gogh.
    Изменяет только цветовую тему, но при этом, работает со всеми ванильными терминалами.
    Ответ написан
    Комментировать
  • Как должен выглядеть такой запрос на javascript?

    Wondermarin
    @Wondermarin
    const queryData = [
      {
        fields: {
          TITLE: data.name,
          NAME: data.name,
          PHONE: {
            VALUE: data.phone,
            VALUE_TYPE: "work",
          }
        },
        params: {
          REGISTER_SONET_EVENT: "Y",
        },
      },
    ];
    Ответ написан
    Комментировать
  • Как добавить свой дополнительный шлюз оплаты woocommerce?

    Искал очень долго решение вопроса, но никто не писал доступно для чайников.
    Пришлось искать методом тыка, при помощи догадок.
    Решил вопрос следующим образом.

    Внес исправления

    1. Переходим в папку wp-content\plugins\woocommerce\includes\gateways
    2. Создаем папку, например "COD1"
    3. Заходим в папку "COD" и копируем файл "class-wc-gateway-cod.php"
    4. Заходим в папку "COD1" и вставляем фай "class-wc-gateway-cod.php"
    5. Переименовываем "class-wc-gateway-cod.php" в "class-wc-gateway-cod1.php"
    6. Открываем файл "class-wc-gateway-cod1.php" при помощи Notepad.
    7. Открываем поиск по файлу CTRL+F и пишем "COD"
    8. Находим строку "class WC_Gateway_COD extends WC_Payment_Gateway" и изменяем на "class WC_Gateway_COD1 extends WC_Payment_Gateway"
    9. Находим строку "$this->id= 'cod'; и меняем на "$this->id= 'cod1';
    10. Находим строку "if ( $order && 'cod' === $order->get_payment_method()" и переименовываем на "if ( $order && 'cod1' === $order->get_payment_method()"

    Также можете изменить название оплаты в строке $this->method_title = __( 'Новое Название оплаты', 'woocommerce' );
    и описание способа оплаты.
    $this->method_description = __( 'Новое описание оплаты.', 'woocommerce' );

    11. Переходим в папку "wp-content\plugins\woocommerce\includes" и открываем файл "class-wc-payment-gateways"class-wc-payment-gateways.php" при помощи Notepad.
    12. Нажимаем CTRL+F и ищем строку "'WC_Gateway_COD',", копируем ее и вставляем в конце списка, после чего переименовываем эту строк в 'WC_Gateway_COD1',
    13. Открываем админку сайта и у Вас добавился новый шлюз оплаты.
    Ответ написан
    4 комментария
  • Можно ли начинать изучать программирование с React.js?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно. Результат будет хуже (намного), дольше (в разы) и сложнее (если вы склонны плакать - заплачете).
    Но можно.
    Ответ написан
    1 комментарий
  • Есть ли бесплатные API интернет магазинов?

    @Kirill-Gorelov
    С ума с IT
    Ну во первых, это очень крутое портфолио)))
    Во-вторых, посмотри яндекс маркет. И Литрес, глянь.

    А собственно я бы предложил сделать иначе. Сделать mock сервер, где ты сам зальешь туда тестовые товары, сделаешь к нему апи, и будешь к своему же апи подключаться. Одним выстрелом "убиваешь" двух зайцев.
    Ответ написан
    2 комментария
  • Как вылечить [Browsersync] Reloading Browsers... (buffered 4 events)?

    Код некорректный, отслеживание изменений не нужно раскидывать по разным местам, обновление браузера прописывается в series, а-не в задаче. В gulp 4 версии обновление будет корректно работать с таким вариантом написания:
    gulp.task('browser-sync', function() {
        browserSync.init({
            server: {
                baseDir: 'app'
            }
        });
    });
    
    gulp.task('html', function () {
        return gulp.src(path.src.html) 
            .pipe(gulp.dest(path.app.html));
    });
    
    gulp.task('watch', function () {
        gulp.watch('app/**/*.*').on('change', browserSync.reload);
        gulp.watch(path.src.html).on('change', gulp.series(html, browserSync.reload));
    });
    
    gulp.task('default', gulp.series(
        gulp.parallel('watch', 'browser-sync') //запускаем паралельно слежку за файлами и синхронизацию браузера
    ));
    Ответ написан
    Комментировать
  • Как сделать динамический ключ объекта по значениям другого объекта?

    @StockholmSyndrome
    interface Types {
      TYPE: 'type';
      ANOTHER_TYPE: 'anotherType';
    }
    
    type SomeType = {
      [P in Types[keyof Types]]: () => void;
    };
    
    const object: SomeType = {
      type: () => {}, 
      anotherType: () => {}
    }
    Ответ написан
    Комментировать
  • Чем друг от друга отличаются эти три выражения?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1)
    var i = 0;
    if( (function(){return i%2==0})(i) ){
      console.log(i);
    };

    в условии функция, вызванная с глобальной i=0, вернет true, в консоль выведется 0

    2) То же самое, что 1). Только в 1) функция обернута в скобки, и то что в скобках - вызывается, в 2) в скобки обернут результат вызова. В консоль - 0.

    3) Нет вызова функции внутри скобок, но сама функция интерпретируется как true, и получаем тот же 0 в консоли.

    Зачем это всё? В образовательных целях?
    Ответ написан
    2 комментария
  • Как исключить папку из сборки Gulp?

    edalis
    @edalis
    HTML, CSS, JS, Node.js
    Замените в таске build строку:
    return gulp.src(['!./src/less/**/*', './src/**/*', './src/*.html'])

    на:
    return gulp.src(['!./src/{less,less/**/*}', './src/**/*', './src/*.html'])

    --------------------------------------------------------------------------------------------------------------------------------------------
    Вот это:
    return del('./build/less', {force:true});

    не срабатывает, потому что у вас уже есть оператор return до этого, вот здесь:
    return gulp.src(['!./src/less/**/*', './src/**/*', './src/*.html'])

    Уберите его, оставьте просто:
    gulp.src(['!./src/less/**/*', './src/**/*', './src/*.html'])

    Или сделайте отдельный таск del, который будет удалять ненужные папки после сборки и запускайте его после таска build.
    Ответ написан
    Комментировать
  • Как изменяется переменная в цикле события?

    dimovich85
    @dimovich85 Куратор тега JavaScript
    https://u-academy.net/
    Нашли кнопку, сохранили ссылку.
    Запустили цикл. Появилась переменная i = 0;
    На клик по кнопке повесили функцию, которая КОГДА КЛИКНУТ на кнопку возьмет переменную i и выведет в консоль.
    Цикл не закончился, переменная i = 1;
    На клик по кнопке повесили ЕЩЕ такую же функцию.
    Цикл не закончился, переменная i = 2;
    На клик по кнопке повесили ЕЩЕ такую же функцию.
    Цикл продолжается, но теперь i = 3, условие цикла дает false, цикл прекратился, но i = 3.
    По кнопке кликнули....
    Запустилась функция номер раз: ищет переменную i, находит, а там 3 -> в консоль ее.
    Запустилась функция номер два: ищет переменную i, находит, а там 3 -> в консоль ее.
    Запустилась функция номер три: ищет переменную i, находит, а там 3 -> в консоль ее.
    ИТОГО: в консоли три тройки.
    Ответ написан
    4 комментария
  • Как изменяется переменная в цикле события?

    @quiplunar
    Правильно, должно выводиться 3, так как при компиляции кода for выполняется 3 раза, и 3 раза добавляется на кнопку событие клика. После выполнения всех итерация i будет равна последнему значению и при клике оно показывается, так как при клике for не срабатывает, т.к он не в функции клика и выполняется при компиляции.

    Так-же замените это:

    const button = document.getElementById('button');

    На современный способ:

    const button = document.querySelector('#button');

    И вот это:

    button.addEventListener('click', function (e){
         console.log(i);
    });


    На это:

    button.addEventListener('click', (event) => {
         console.log(i);
    });


    (ОПАСНО, менять на стрелочную функцию только при понимании того как она работает, при не уверенности не использовать данный совет)
    Ответ написан
    4 комментария
  • Как написать такую красоту на javascript?

    lazalu68
    @lazalu68
    Salmon
    Можно например внутри элемента с сердечком создать прозрачный абсолютно спозиционированный оверлей; при попадании на него курсора мыши 1) включать анимацию сердечка и 2) устанавливать скорость анимации и цвет сердечка в зависимости от расстояния до центра оверлея

    Апдейт: СДЕЛАЛ ЧЁРТОВ ПРИМЕР! Полтора дня делал. Вот: https://jsfiddle.net/lucifer63/41y3qdu9/
    Это эталонный пример говнокода, но я чо-то не смог проще сделать
    Ответ написан
    Комментировать