Ответы пользователя по тегу JavaScript
  • Фильтр массива объектов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Ваш код
    var arr = [
      {0: {
        count: 3,
        emergency_count: 2,
        object: {},
        positions: {
          0: {
            position: "A-09-07B-11",
            positionBarcode: "M01500",
            wares: [{
              0: {
                action: null,
                code: "9465",
                data: "2018-03-31T00:00:00",
                name: "Хлопья овс 400г экстра Русский завтрак",
              }
            }]
          },
          1: {
            position: "A-09-07B-11",
            positionBarcode: "M01500",
            wares: [{
              0: {
                action: null,
                code: "187853",
                data: "2018-03-31T00:00:00",
                name: "Мука в/с Алейка 1кг",
              },
            }]
          },
        },
      }},
      {1: {
        count: 3,
        emergency_count: 2,
        object: {},
        positions: {
          0: {
            position: "A-09-07B-11",
            positionBarcode: "M01500",
            wares: [{
              0: {
                action: null,
                code: "127950",
                data: "2018-03-31T00:00:00",
                name: "Паста соево/перцовая Самдянг 500г контейнер",
              }
            }]
          },
          1: {
            position: "A-06-02B-11",
            positionBarcode: "M01007",
            wares: [{
              0: {
                action: null,
                code: "159859",
                data: "2018-03-31T00:00:00",
                name: "Чай Гринфилд Барберри вкус барбарис черн 25пак",
              }
            }]
          },
        },
      }},
      {2: {
        count: 3,
        emergency_count: 2,
        object: {},
        positions: {
          0: {
            position: "A-09-07B-11",
            positionBarcode: "M01500",
            wares: [{
              0: {
                action: null,
                code: "383582",
                data: "2018-03-31T00:00:00",
                name: "Корнишоны маринов 540мл Середина лета",
              },
            }]
          },
          1: {
            position: "A-06-02B-11",
            positionBarcode: "M01007",
            wares: [{
              0: {
                action: null,
                code: "159859",
                data: "2018-03-31T00:00:00",
                name: "Чай Гринфилд Барберри вкус барбарис черн 25пак",
              }
            }]
          },
        }
        
      }},
    ];
    Решение
    var code = "159859";
    arr.find(
     e=>Object.values(e).find(
      e=>Object.values(e.positions).find(
       e=>(p=e.position,e.wares.find(
        e=>Object.values(e).find(
         e=>e.code==code?n=e.name:0))))));
    alert(n && 'name = ' + n + "\nposition = " + p || 'Not found');

    А чего сложного? Почему вы сами не можете пройтись по структуре?
    Ответ написан
    3 комментария
  • Чем заменить eval для простых выражений?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    Сделал решение на скорую руку - eval_lite.js.
    Это тихий ужас, но работает.
    Ответ написан
    Комментировать
  • Как определить верхнерегистровый аналог символа?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно иметь дело с кодами символов. Английские, русские, и не забудьте про выскочку "Ё". Почти все символы в одном алфавите имеют одно и то же смещение по коду с противоположным регистром. Думаю, идея понятна.
    Ответ написан
    1 комментарий
  • Можно как-то создать свойство объекту подобным образом obj[i][j]?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    obj[i] = {}; // Или []
    obj[i][j] = arr[i][j];

    В одну строчку менее красиво, так что не рекомендую:
    (obj[i]={})[j] = arr[i][j];

    А вообще зависит от того, хотите ли вы копию или ссылку. Ещё вариант:
    obj[i] = arr[i]; //Со всеми прочими свойствами, которые рядом
    Ответ написан
    Комментировать
  • Как правильно экранировать json в javascript?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В общем, ваша ошибка:
    Uncaught SyntaxError: Unexpected token ' in JSON at position 1

    Прямо говорит о том, что на позиции 1 встретилась одинарная кавычка.
    1 - это вторая позиция в строке (0 -первая).
    Например, строка может быть такой:
    {'xxx':123}
    Такая строка выдаст похожую ошибку, потому что второй символ (одинарная кавычка) - не валидный.
    Ответ написан
  • Как запустить данный JS скрипт через 3 секунды?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Спасибо за скрипт!
    Думаю, все знают, что с ним делать.

    А по теме вопроса:
    setTimeout(adb_checker, 3000, {
    	url: '<span></span>',
    	redirect: false,
    	warning: {
    		text: '<p>Отключите AdBlock <br> для данного сайта.</p>',
    		button: '<span></span>'
    	}
    });
    Ответ написан
    Комментировать
  • Как возвращать разные сообщения при разных ответах?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если status = ok возвращаем один ответ, если status = error возвращаем другой ответ

    Это вопрос по JavaScript? Тогда вам подойдёт условный оператор:
    if ( ... ) ... else .... ;

    P.S. По вашим вопросам складывается ощущение, что вы пилите этот ваш vk.updates.hear, вообще не зная JS. Не проще ли нанять спеца или хотя бы изучить основы?
    Ответ написан
    Комментировать
  • Как сделать ограничение по времени на команду?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let can_do_commands = true;
    
    ......
    
    can_do_commands = false;
    setTimeout("can_do_commands = true", 60000);

    Плюс соответствующая проверка там, где от пользователя принимаются команды. Надеюсь, дальше очевидно.
    Ответ написан
  • Как создать функцию, которая будет плюсовать элемент массива n раз?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вам нужно всего лишь понимать, что у вас происходит. И тогда всё получится. Попробуйте мысленно выполнять код шаг за шагом. В любом случае, вот решение:
    var one = ["a", "b", "c"], two = ["d", "e", "f"];
    
    function paster(c, iter){
    	var summa="";
    	for(var i = 0; i<iter; i++){
    		summa = summa + c;
    	}
    	return summa;
    }
    
    one[0] = one[0]+paster(two[0], 10);
    alert(one[0]);
    Ответ написан
    1 комментарий
  • Как перевести число в 256ричную систему исчисления?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вот пример, но вам нужно придумать алфавит из 256 символов, иначе работать не будет. А также дробные и отрицательные не поддерживает:
    const alphabet256 = '0123456789abcdefghijk......ЭЮЯ'; //Нужно 256 символов!
    const old_toString = Number.prototype.toString;
    Number.prototype.toString = function(radix) {
    	if (radix == 256) {
    		let num = +this;
    		if (num === 0) return '0';
    		let result = '';
    		while (num > 0) {
    			result = (alphabet256[num&255] || '?') + result;
    			num = num >> 8;
    		}
    		return result;
    	}
    	return old_toString.apply(this, arguments);
    }

    Проверка:
    (15).toString(256); // f
    (16).toString(256); // g
    (256).toString(256); // 10
    (257).toString(256); // 11

    Вообще, как я сказал в комментах, вам, скорее всего, подойдет 16-ричная система. Ума не приложу, зачем 256-ричная, её же не удобно читать будет. А представление чисел нужно только для чтения человеком. Компьютеру вообще пофиг, он всё хранит в двоичной системе.
    Ответ написан
    Комментировать
  • Как настроить цель на форме iframe (форма с другого сайта)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Передавайте некий GET-параметр со способом обратной связи. Например, URL.
    Как-то так:
    <iframe src="https://example.com/?callback=mysite.com/fromform.php"></iframe>

    Можно ещё параметров добавить. Например, указать, что вы хотите, чтобы вам отправили.
    Разработчики формы каким угодно способом отправляют вам то, что вам нужно. Например, дёргают URL с вашего сайта и передают GET-параметры:
    https://mysite.com/fromform.php?answer=123
    Ответ написан
    Комментировать
  • Как выполнить в данном случаи выполнить функцию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Автор, дарю костыль на все функции, которые нужно выполнять всего один раз:
    let foo_done = false;
    function foo() {
    	if (foo_done) return;
    	foo_done = true;
    	//ваш код функции...
    }

    Ну а по-хорошему нужно сделать красиво. Вы добавляете функцию через addEventListener, значит в самой функции нужно вызывать removeEventListener, чтобы функция отвязывала саму себя от события. Таким образом, функция выполнится один раз и больше не будет выполняться.
    Ответ написан
  • Как повесить обработчик на тэг select?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Безымянную функцию можно скопировать в другое место и дать ей имя.
    Затем вы сможете использовать её как в событии onchange, так и в событии onload.
    Ответ написан
    Комментировать
  • Как проверить код состояния AJAX запроса?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В общем случае: (xhr.readyState != 4)
    Справка
    Ответ написан
  • Как отследить консоль клиента на сервере?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно перехватить функцию и аяксом посылать инфу на сервер.
    Аякс сами додумаете, а перехват прост:
    let old_console_log = console.log;
    console.log = function() {
    	//Send ajax to server...
    	old_console_log('La-la-la! Hello there!');
    	// Call old fn
    	old_console_log(...arguments);
    }

    И не забудьте про warn, err и info.
    Ответ написан
    Комментировать
  • Как взять данные из массива в JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала в режиме зануды должен заметить, что это задание, а не вопрос.
    Далее, у вас ошибки в понимании синтаксиса JS. Советую перечитать описание JSON, хотя бы в википедии. Например, {7, 6, 8} - так нельзя писать, ибо формат массива, но формально объект, парадокс.

    Ну а решение простое, в лоб:
    newObj = []; //Новая структура
    for(let i=0;i<myObj.length;i++) { //Сканируем исходный массив
    	let o = myObj[i]; //Очередной объект
    	if (!newObj[o.category_id]) newObj[o.category_id] = [];
    	newObj[o.category_id].push(o.object_id);
    }

    Результат:
    5c8f569834087054742669.png
    Ответ написан
    4 комментария
  • Как получить данные из iframe?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    alert(window.frames[0].document.links[0].href)
    Ответ написан
  • Как остановить таймер в данном случае?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    То, что вы хотите, написано очень смутно, сложным языком. Я не разобрался.
    Но вот вам простой грубый костыль, который приходит в голову:
    function stopAllTimers() { //Остановить все таймеры
    	let id = setTimeout('1',0);
    	for(let i=id;i>=0;i--) clearTimeout(i);
    }

    Проверка на вшивость:
    setTimeout('console.log(123)',0); stopAllTimers(); //Всё ок
    Ответ написан
    2 комментария
  • Какой алгоритм решения этой задачи можете посоветовать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function repairCase(str, substr) {
    	if (!substr) return ''; //Empty string
    	//let arr = []; //Найденные результаты. Для наглядного дебага
    	let str_upper = str.toUpperCase();
    	let sub_upper = substr.toUpperCase();
    	let len = sub_upper.length;
    	let index = 0; //Стартовая позиция
    	let max_score = -1; //Максимальная оценка на совпадение по регистру.
    	let answer = ''; //То, что вернёт функция.
    	while (true) {
    		let result = str_upper.indexOf(sub_upper, index); //Ищем позицию очередного куска
    		if (result == -1) break;
    		let found = str.substr(result, len); //Найденный кусок
    		let score = 0; //Оценка совпадения
    		for(let i=0;i<substr.length;i++) { //Простой алгоритм:: чем больше совпадений, тем лучше.
    			if (substr[i] == found[i]) score++; //Увеличиваем оценку за каждое совпадение по символу.
    		}
    		if (score > max_score) { //Нашли более подходящий результат
    			max_score = score;
    			answer = found;
    		}
    		//arr.push({ pos: result, found: found, score: score });
    		index = result + 1;
    	}
    	//console.log(arr); //Смотрим, что под капотом
    	return answer;
    }

    Примеры вызова:
    repairCase('Hello World', 'hell'); // 'Hell'
    repairCase('Алан Тьюринг', 'а'); // 'а'
    repairCase('Дональд Кнут', 'Н'); // 'н'
    repairCase('Линус Торвальдс', 'ндc'); // ''


    P.S. У меня к вам встречный вопрос: вы программист? Задача решается за 10 минут.
    Ответ написан
    3 комментария
  • Почему не работает appendchild со стилями?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Например, если где-то определить такой стиль, то он всё испортит:
    #container div {
      width: 10px !important;
    }

    А так может быть, что угодно. Например, другой JS код аналогичным образом заменяет стили на свои.
    Ответ написан
    Комментировать