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

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    (почти шутка))) сделайте миниигру по типу flappy bird, например на базе этой заготовки для rolling bun )))
    Ответ написан
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вы неверно написали условие

    у вас:
    rays[i].x == blocks[q].x && rays[i].y >= blocks[q].y && rays[i].y <= blocks[q].y + 32


    должно быть:
    rays[i].x>=blocks[q].x && rays[i].x <= blocks[q].x + 32 && rays[i].y >= blocks[q].y && rays[i].y <= blocks[q].y + 32


    Ну а бонусом ловите рабочий вариант:
    Ответ написан
  • Возникает ошибка в функций когда надо вывести ноль. Как исправить?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Все считает верно, смотрите сами.

    код: https://jsfiddle.net/lastuniverse/hfbdzt31/6/

    вывод:
    90  =>  3.061616997868383e-16  ---  5
    180  =>  3.061616997868383e-16  ---  5
    240  =>  3.061616997868383e-16  ---  5
    360  =>  3.061616997868383e-16  ---  5


    Если вас смущает что вместо нуля выводит 3.061616997868383e-16 то учтите что:
    1. 3.061616997868383e-16 это 0.0000000000000003061616997868383, то есть величина очень близкая к нулю
    2. ошибка возникающая при вычислении (неточность вычислений)

    Ну и цитата взятая из текста по ссылке:
    Можно ли обойти проблему? Конечно, наиболее надёжный способ — это округлить результат используя метод toFixed(n):

    let sum = 0.1 + 0.2;
    alert( sum.toFixed(2) ); // 0.30
    Ответ написан
    Комментировать
  • Каким образом посчитать разность дат в JS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    с использованием https://momentjs.com/docs/
    // ваши даты из бд
    var start = "1970-01-01";
    var end = "2018-03-10";
    
    // парсим их с помощью moment-а
    var a = moment(start, "YYYY-MM-DD");
    var b = moment(end, "YYYY-MM-DD");
    
    // получаем количество дней между датами
    var days = a.diff(b, 'days') ;
    
    // пихаем days куда вам там надо
    ...


    или так (на нативном js)
    // ваши даты из бд
    var start = "1970-01-01";
    var end = "2018-03-10";
    
    // парсим их с помощью нативного JS
    var a = Date.parse(start);
    var b = Date.parse(end);
    
    // получаем количество дней между датами
    var days = Math.floor(Math.abs(b-a)/(1000*60*60*24)) ;
    
    // пихаем days куда вам там надо
    ...
    Ответ написан
    9 комментариев
  • Как сформулировать regexp?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var re = /\[(.*?)\]\s*\((http.*?)\)/g;
    var txt = '[катетер-направленному тромболизису] (https://www.radiologyinfo.org/en/info.cfm?pg=thrombo), но та, которая, помимо удаления тромбов, также открывает и усиливает слишком маленькие кровеносные сосуды через стенты или другие средства. Также может быть желательно увеличить их проницаемость, чтобы фиксаторы достигали паренхимы мозга по всему кровеносному сосуду, а не только на кончиках. Лазер может делать микроскопические дыры по всей длине, а затем, возможно, добавить [тонкий слой полиамида] (https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials)';
    
    var html = txt.replace(re,(a,b,c)=>{
       console.log("-------------\ntext:",b,"\nurl:",c);
       return `<a href='${c}'>${c}</a>`;
    });
    
    console.log("-------------\n",html);

    выхлоп в консоль

    -------------
    text: катетер-направленному тромболизису 
    url: https://www.radiologyinfo.org/en/info.cfm?pg=thrombo
    -------------
    text: тонкий слой полиамида 
    url: https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials
    -------------
     <a href='https://www.radiologyinfo.org/en/info.cfm?pg=thrombo'>https://www.radiologyinfo.org/en/info.cfm?pg=thrombo</a>, но та, которая, помимо удаления тромбов, также открывает и усиливает слишком маленькие кровеносные сосуды через стенты или другие средства. Также может быть желательно увеличить их проницаемость, чтобы фиксаторы достигали паренхимы мозга по всему кровеносному сосуду, а не только на кончиках. Лазер может делать микроскопические дыры по всей длине, а затем, возможно, добавить <a href='https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials'>https://en.wikipedia.org/wiki/Thin-film_composite_membrane#Structure_and_materials</a>

    Ответ написан
    Комментировать
  • Поможете найти матрицы?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    код (спойлер)
    var matrixes =  [
      [
        [3, 2, 1],
        [1, 2, 3],
        [3, 1, 3]
      ], // Должен выводится 3
      [
        [3, 2, 1],
        [1, 2, 3],
        [3, 2, 1]
      ], // Должен выводится 0
      [
        [1, 0, 0, 0],
        [0, 1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, 1]
      ], // Должен выводится 4
      [
       [2, 4],
       [4, 2]
      ] // Должен выводится 0 
    ];
    
    matrixes.forEach( matrix => {
       console.log("------------------------");
       console.table(matrix);
       console.log(calc(matrix));
    });
    
    
    function calc(matrix){
      let template = matrix[0];
      let result = matrix.reduce( (acc1, items, index1) => {
        if(index1===0) return acc1;
        template = template.reverse();
        acc1 += items.reduce( (acc2, item, index2) => {
            acc2 += Math.abs(template[index2]-item);
            return acc2;
        },0);
        return acc1;
      },0);
      return result;
    }


    результат:
    5e5fed549ce9e339758941.png

    ну и песочница:
    Ответ написан
    1 комментарий
  • Как правильнее всего достать значение объекта при помощи строки?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Не знаю как правильнее, но с ходу вижу 2 варианта:

    первый, и точно не очень правильный, но возможно самый быстрый и простой
    var obj = { a: { b: { c: 3 } }, c: 1, b: 1 };
    var str = 'a.b.c';
    var value = eval('obj.'+str);


    второй выглядит както так
    var obj = { a: { b: { c: 3 } }, c: 1, b: 1 };
    var value = getPath(obj,'a.c');
    
    
    function getPath(object, keyPath){
        if( typeof keyPath === 'string' ) keyPath = keyPath.split(/\./);
        if( !Array.isArray(keyPath) ) return undefined;
        let key = keyPath.shift();
        if( !key) return object;
        if( !object.hasOwnProperty(key) ) return undefined;
        if( keyPath.length === 0 ) return object[key];
        return getPath(object[key],keyPath);
    }
    Ответ написан
    2 комментария
  • Как создать маску для input?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Замените в вашем примере https://codepen.io/Slasher_/pen/qBdmMBG свой код на этот:

    $('input[name="date"]').mask("00:00 rm", {
        translation: {
          'r': {
            pattern: /(a|p)/,
          },
          placeholder: "__:__ __"
        }
      });
    Ответ написан
    Комментировать
  • Получается только в одном файле?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    вставляйте свой скрипт в любом месте страницы указав ему атрибут defer

    ну и почитайте это Внешние скрипты, порядок исполнения
    Ответ написан
    Комментировать
  • Почему js дублирует event-ы?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Потому что вы при каждом клике по сабмиту добавляете новый слушатель (это происходит где то в той части кода, которую вы не представили в вопросе).
    Ответ написан
    4 комментария
  • Возможно ли как-то выполнять свой js-код на других сайта?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Еще есть такой вариант, открываете сайт, затем инструменты разработчика если у вас хром или исследовать элемент если ФФ, затем выбираете "Консоль" и в ней пишитие любой js который тут же выполнится в рамках сайта. Но если вы пойдете этим путем, то при каждом обновлении станицы вам придется заново писать свой JS в консоль))))

    картинка
    5e55ad346f665634873211.jpeg
    Ответ написан
    Комментировать
  • Что означает выражение /some/ в JS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Комментировать
  • Что такое циклическая ссылка?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Что такое циклическая ссылка?

    рассмотрим следующий код:
    var a = {};
    a.a = a;

    Теперь если мы попробуем обратиться например к a.a.a у нас получиться, и к a.a.a.a.a.a получится. При этом a == a.a == a.a.a == a.a.a.a == и т.д

    Это и есть самый простой пример циклической ссылки.

    ... почему они мешают преобразованию объекта в JSON.

    Потому что JSON по спецификации не может содержать циклических ссылок, следовательно наш объект a не может быть преобразован к JSON
    Ответ написан
    2 комментария
  • Почему я получаю такой результат?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    И почему всё выводится без задержки?

    потому что у вас ((i) => { return console.log( i ); })(i) самовызывающаяся функция, которая выполняется сразу. сделайте вместо нее ()=>{ return console.log( i ); }

    а весь пример сделайте так:
    for (let i=1; i<=5; i++) {
      setTimeout( () => {
        return console.log( i );
      }, 1000 );
    }


    Обратите внимание на let вместо var в объявлении цикла
    Ответ написан
    Комментировать
  • Почему не работает async/await в примере?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    choicesInit copyDiv и c1 у вас обычные синхронные функции. Для них не надо писать await

    Сейчас гляну дальше и отпишусь если найду другие косяки

    немного изменил ваш пример убрав лишние await-ы и вставив контрольный вывод в консоль для отслеживания порядка вызовов.
    https://jsfiddle.net/c02zeh3n/

    на выходе имеем правильный порядок: 0, 1, 2, 3, 4, 5 (смотрите вывод в консоль) а значит await у вас отрабатывает верно
    Ответ написан
    7 комментариев
  • Почему не происходит отрисовка canvas в новом окне?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вы не пробовали смотреть в консоль браузера на предмет выводимых ошибок?

    TypeError: document.all.surface is undefined
    ReferenceError: Numb is not defined
    ReferenceError: check is not defined

    Подготовьте ваш пример в песочнице, например https://jsfiddle.net/
    Проверьте что в консоль не сыпятся ошибки.
    Если сыпятся, то исправьте их.
    Затем кидайте ссылку на песочницу сюда, будем смотреть и помогать)
    Ответ написан
  • Как записать в регулярном выражении любое количество любых символов?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    let re = new RegExp(variable + "=" + ".*?(?=&|$)");
    const result = url.replace(re, variable + "=" + newData);

    Но данный вариант далеко не идеален/
    я бы предпочел как то так:

    let url = 'http://localhost/?a=1&b=2&test=Y&clear=allcache';
    
    let re = /(\?|&)(.*?)\=(.*?)(?=&|$)/g;
    
    const newdata = {
       test: 333,
       clear: 4444
    };
    
    function changeURL(url, keys) {
       return url.replace(re, (a,prefix,key,val)=>{
         if( keys[key] )
           return prefix+key+"="+keys[key];
         return prefix+key+"="+val;
       });
    }
    
    url = changeURL(url, newdata);
    console.log(url);
    Ответ написан
    Комментировать
  • Как привести группу объектов к массиву?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var parse = (arr)=>arr.reduce((a,b)=>b.lists.forEach(c=>c.tags.forEach(d=>a.push({tags:d,volume:b.volume,list:c.list})))||a,[]);
    
    var array = parse(json.results);
    
    console.log(array);


    на выходе:

    [ { tags: 'hello', volume: 1, list: 1 },
      { tags: 'world', volume: 1, list: 1 },
      { tags: 'hello', volume: 1, list: 2 },
      { tags: 'world', volume: 2, list: 1 },
      { tags: 'hello', volume: 2, list: 2 },
      { tags: 'internet', volume: 2, list: 2 } ]

    Ответ написан
  • Где найти нормальный форум сделанный на nodejs?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Ответ написан
    Комментировать
  • Как обновить или добавить в массив объект?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    // функция с "МАГИЕЙ"
    var upsertItem = (arr, item)=>{
       let isFound = false;
       arr = arr.map(obj=>{
          if( obj.id==item.id ){
             isFound = true;
             return item;
          }else{
             return obj;
          }
       });
       if( !isFound )
         arr.push(item);
       return arr;
    }
    
    // используем
    arr=[{"id":1,"red":1000},{"id":2,"red":1000},{"id":3,"black":1000}];
    
    // обновит элемент
       arr = upsertItem(arr, {"id":1,"red":0});
       console.log(JSON.stringify(arr));
       // выведет: [{"id":1,"red":0},{"id":2,"red":1000},{"id":3,"black":1000}]
    
    // добавит элемент
       arr = upsertItem(arr, {"id":4,"blue":0});
       console.log(JSON.stringify(arr));
       // выведет: [{"id":1,"red":0},{"id":2,"red":1000},{"id":3,"black":1000},{"id":4,"blue":0}]
    Ответ написан