• Как обновить или добавить в массив объект?

    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}]
    Ответ написан
  • Как сделать Bevel на вершину?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    CTRL + SHIFT + B

    вот результат
    5deff6369dbde480466828.png
    Ответ написан
    Комментировать
  • Почему не получается изменить значение переменной?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    потому что в строчке
    рopatos_num = popatos_num + 1;
    вы в имени переменной перед знаком равно допустили ошибку. Одна из букв имени набита в русской раскладке (скорее всего p или o или a)
    Ответ написан
    3 комментария
  • Script.js:17 Uncaught TypeError: Cannot read property 'replaceChild' of null?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    "Уважаемый" автор вопроса, вам на почти)))) человеческом, английском языке, пишет:
    Cannot read property 'replaceChild' of null
    что переводится:
    гугл переводчик - Не удается прочитать свойство 'replaceChild' из null
    яндекс переводчик - Не удается прочитать свойство 'replaceChild' из null

    смотрим внимательно: Ни как не могу прочитать свойство 'replaceChild' из якобы объекта если оно ни хрена не объект а null.

    Может быть JS ошибся? Проверим:
    console.log(document.parentNode) // выведет null

    Но ведь мы умные, на слово не верим и идем читать доку в поисках может ли быть свойство parentNode у document?
    один parentNode
    два document

    И видим что:
    Каждая веб-страница, которая загружается в браузер, имеет свой собственный объект document. Интерфейс документа служит точкой входа для получения содержимого веб-страницы (всего DOM - дерева...)

    То есть document содержит всю веб страницу (все что включает тэг body).
    ЭТОГО НЕ МОЖЕТ БЫТЬ, А КАК ЖЕ СВОЙСТВО ПАРЕНТ????? (скажете вы)
    Чтобы Вас убедить предложу прокрутить по ссылке document чуть вниз и посмотреть какие есть свойства и методы у document. Теперь Вам должна быть понятна причина появления ошибки:
    Uncaught TypeError: Cannot read property 'replaceChild' of null
    Ответ написан
  • Как сделать скрипт массовой замены текста?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вот вариант, он рабочий но далеко не оптимален.
    Ответ написан
  • Какая нужна регулярка чтобы проверка проходила на номера одного оператора?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Одной регуляркой тут делать не правильно на мой взгляд, поэтому демонстрирую подход максимально развернуто.

    Для начала ознакамливаемся с международным форматом телефонных номеров

    А после немного кодим
    // функция разбирает телефонный номер на части и возвращает их для проверки
    function parsePhoneNumber(phoneNumberAsText){
      // через парамерт phoneNumberAsText функция получает текст содержащий номер телефона
      // предположим что обрабатываемое текстовое представление номера телефона
      // может принимать следующий вид (и имеет принадлежность к РФ):
      // "+7 (999) 888-77-55"
      // "8 (999) 888-77-55"
      // "+7 999 888-77-55"
      // "+7999888-77-55"
      // "+799988-777-55"
      // "+799988-77-555"
      // "+79998887755"
      // "89998887755"
      // и т.д.
    
    
      // убираем из него все лишнее
      var phone = "+"+phoneNumberAsText.replace(/^8/,"+7").replace(/[^0-9]/,""); 
    
      // составляем регулярку на основе международного формата телефонных номеров
      var re = /^(\+\d)(\d{3})(\d{7})$/;
    
      // получаем составные части нашего телефонного номера
      var [phone, country, code, number] = phoneNumber.match(re);
      // где:
      // phone - номер телефона в формате "+79998887766"
      // country - код страны (фикция, данный код будет работать для РФ и еще пары стран, поэтому считаем что тут всегда "+7")
      // code - трехзначный код региона/оператора
      // number - семизначный номер телефона в регионе/у оператора
    
      // возвращаем полученный результат разбора номера
      return {
        phone: phone, 
        country: country,
        code: code,
        number: number
      };
    }
    
    // парсим номер "8 (999) 888-77-66"
    var result = parsePhoneNumber("8 (999) 888-77-66");
    
    // на выходе в result получим объект вида
    // { phone: "+79998887766", country: "+7", code: "999", number: "8887766" }
    
    // предположим что у вас есть массив с нужными вам кодами регионов/операторов
    // allowCodes = ["999", "998" и т.д];
    
    // смотрим совпадает ли код региона/оператора с одним из кодов в allowCodes
    if( allowCodes.indexOf(result.code) ){
       console.log("Номер "+result.phone+" принадлежит искомой группе/региону/оператору")
    }else{
      console.log("Номер "+result.phone+" НЕ принадлежит искомой группе/региону/оператору")
    }
    Ответ написан
  • Как передать объект с сервера node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Учите английский, в сообщении об ошибке все написано:
    The first argument must be one of type string ...


    Что можно перевести примерно так:
    Первый аргумент может быть только строкой.

    Таким образом чтобы передать JSON его надо преобразовать к строковому представлению:
    ws.send( JSON.stringify({'connected':25,"room":1000}));
    Ответ написан
    3 комментария
  • Как работает алгоритм "Решето Эратосфена" (java)?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    не могу понять почему в данной задаче второй цикл проходит до n/i.

    так как нам надо найти все простые числа меньшие чем n то будет логично что все числа полученные перемножением i и j с результатом произведения больше чем n нам не нужны, таким образом, деля n на i мы находим максимально возможное j при котором результат перемножения i и j будут меньше или равен n)))
    Ответ написан
  • Как перевести число в 16-ричное представление?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    реализация на js
    // можно обойтись и без этого массива, но для демки делаю с ним
    var hexchar = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"].map(v=>v.toString());
    function decToHex(num){
       let out = num&15;
       num = num>>>4;
       return num?decToHex(num)+hexchar[out]:hexchar[out];
    }
    
    /* тестируем */
    for(var i=0; i<100; i++){
       console.log(i,"=",decToHex(i));
    }


    вывод в консоль
    0 = 0
    1 = 1
    2 = 2
    3 = 3
    4 = 4
    5 = 5
    6 = 6
    7 = 7
    8 = 8
    9 = 9
    10 = A
    11 = B
    12 = C
    13 = D
    14 = E
    15 = F
    16 = 10
    17 = 11
    18 = 12
    19 = 13
    20 = 14
    21 = 15
    22 = 16
    23 = 17
    24 = 18
    25 = 19
    26 = 1A
    27 = 1B
    28 = 1C
    29 = 1D
    30 = 1E
    31 = 1F
    32 = 20
    33 = 21
    34 = 22
    35 = 23
    36 = 24
    37 = 25
    38 = 26
    39 = 27
    40 = 28
    41 = 29
    42 = 2A
    43 = 2B
    44 = 2C
    45 = 2D
    46 = 2E
    47 = 2F
    48 = 30
    49 = 31
    50 = 32
    51 = 33
    52 = 34
    53 = 35
    54 = 36
    55 = 37
    56 = 38
    57 = 39
    58 = 3A
    59 = 3B
    60 = 3C
    61 = 3D
    62 = 3E
    63 = 3F
    64 = 40
    65 = 41
    66 = 42
    67 = 43
    68 = 44
    69 = 45
    70 = 46
    71 = 47
    72 = 48
    73 = 49
    74 = 4A
    75 = 4B
    76 = 4C
    77 = 4D
    78 = 4E
    79 = 4F
    80 = 50
    81 = 51
    82 = 52
    83 = 53
    84 = 54
    85 = 55
    86 = 56
    87 = 57
    88 = 58
    89 = 59
    90 = 5A
    91 = 5B
    92 = 5C
    93 = 5D
    94 = 5E
    95 = 5F
    96 = 60
    97 = 61
    98 = 62
    99 = 63


    демка в ресочнице
    Ответ написан
    Комментировать
  • Can't set headers after they are sent?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    думаю проблема тут:
    fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
                if (err) return res.status(500).send(`Ошибка сохранения файла: ${err}`)
                else return
            });


    так как после этого куска кода не дожидаясь результата выполняется следом идущий код. Таким образом возможна ситуация, при которой send в этом куске кода выполнится уже после send-а в последующем коде

    попробуйте заменить этот код на:
    const promise = new Promise(resolve, reject)=>{
       fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
          if (!err) return resolve(true);
          
          res.status(500).send(`Ошибка сохранения файла: ${err}`)
          return reject(false);
       });
    });
    const isWrite = await promise;
    if(!isWrite) return;
    Ответ написан
    2 комментария
  • Почему валидация сработала не так как задумывалась?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Это не совсем ответ на ваш вопрос, просто упрощенная демонстрация подхода
    https://jsfiddle.net/t973546n/2/

    Если надо глубже и больше гуглите "jsonschema validate"
    Ответ написан
    2 комментария
  • Как регуляркой проверять на пустоту?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Регулярка: /^$/

    Пример:
    var str1 = "";
    var str2 = "qwerty";
    var re=/^$/;
    
    console.log( re.test(str1) ); // true
    console.log( re.test(str2) ); // false
    Ответ написан
    4 комментария
  • Как исправить данную ошибку?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Ошибка говорит о том, что el.changelog не определен

    Покажите что выводит в консоль команда console.log(el);
    Ответ написан
  • Что делают эти строки в коде?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Эту строчку можно упростить
    Заменив
    slideIndex = (slideIndex + slides.length + n) % slides.length;

    На
    slideIndex = (slideIndex + n) % slides.length;

    Про упрощение обманул, как заметил 0xD34F в своем ответе добавление slides.length нужно для приведения номера слайда к легитимному диапазону в случае если он отрицательный.

    Сама строка просто перелистывает на n слайдов вперед. Делается это так:
    К номеру текущего слайда добавляется число слайдов на которые надо перескочить вперед а затем, на случай если полученный новый номер текущего слайда больше числа слайдов находим остаток от деления полученного номера на общее число слайдов

    В этой строчке

    slideIndex = n % slides.length;
    Просто выставляется новый номер текущего слайда а на случай если он больше числа слайдов находим остаток от его деления на общее число слайдов
    Ответ написан
    8 комментариев
  • Как сделать автовоспроизведение аудио?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Мой вам совет. Не стоит делать на странице автозапуск музыки, это отталкивает людей. На крайний случай поставьте програмно громкость на "очень тихо" чтобы при заходе на страницу людям не било в уши из всех колонок и саббуфера.

    ЗЫ: вы даже не представляете сколько за сегодняшнюю ночь людей матюкнется в мой адрес за то что кинутая мной в ответе демка запускает музон))))


    Ответ написан
  • Как массив привести к объекту?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    const arr = ["title", "Как объединить js файлы в pug?"], ["my_meta_key", "111"], ["my_meta_key_2", ""],["my_meta_key_3", ""];
    
    const obj = arr.reduce((a,e)=>{ a[e[0]]=e[1]; return a;},{});
    Ответ написан
    Комментировать
  • Как написать функцию пересчета значений одной шкалы в другую?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    На первом интервале
    y=x*1000;

    На втором
    y=1000+(x-0.2)*(6000-1000)
    Ответ написан
    Комментировать
  • Почему не получаю ожидаемый результат в данном примере?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    для таких задач принято использовать getter-ы и setter-ы

    https://learn.javascript.ru/getters-setters
    https://learn.javascript.ru/descriptors-getters-setters

    вот немного кривоватый но рабочий вариант:
    // Create global object class
    let Obj = function (	name,  power )  {   	      
      this.name = name;
      this.power = this._power = power;
    };
    
    
    
    // Create character class
    let Char = function (	name, power, weapon ) {  
      Obj.apply(this, arguments);
    
      this.weapon = weapon;
    
      this.x_power  = power + weapon._power;
      
      Object.defineProperty(this, "power", {
        set: function(value) {
        /* console.log("!!!!!") */
            this._power = value;
            this.x_power  = this._power + this.weapon._power;
        },
        get: function(){
        	  return this._power;
        }
    
      });  
    }
    
    
    
    // Create weapon
                      
    let Club = new Obj("Дубина",  2 ); // 
    
    // Create character 
    // 
    let Player = new Char("Char", 1,  Club);
    
    console.log(Player.power); // Ожидаю получить 1 - Получаю!
    
    console.log(Player.x_power); // Ожидаю получить 3 - Получаю!
    
    Player.power = 5; // Изменяю power 
    console.log(Player.power); // Ожидаю получить 5 - Получаю!
    console.log(Player.x_power); // Ожидаю получить 7 (как power + weapon.power), но мои ожидания не оправдываются: Получаю 3.
    Ответ написан
  • Как правильно создать новый файл в NodeJS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    сначала создай директории в которых это файл лежит

    если версия ноды больше чем 10.12.00 то попробуйте так

    function saveFileSync(path, data){
      let list = path.split(/[\\\/]/);
      let filename = list.pop();
      let filepath = list.join('/');
      fs.mkdirSync(filepath, { recursive: true }, (err) => {
        if (err) throw err;
      });
      fs.writeFileSync(path, data);
    }
    
    
    
    let date = new Date();
    let filename = SSN + '_' + date.getFullYear() + '/' + date.getMonth() + '/' + date.getDay() + '_' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() + '.txt';
    let text = ecg.join('');
    try{
        saveFileSync(filename, text);
    } catch (e) {
        console.log(e);
    }
    Ответ написан