Задать вопрос
  • Почему не рендерится список, полученный по апи?

    0xD34F
    @0xD34F Куратор тега Vue.js
    А зачем вам vue версии 1? Возьмите посвежее, всё будет окей.
    Ответ написан
    2 комментария
  • Index out of range почему это происходит?

    0xD34F
    @0xD34F
    Массив scrores у вас пустой, замените

    scores:=[]int32{}

    на

    scores:=[]int32{0, 0}
    Ответ написан
    Комментировать
  • Как реализовать заполнение матрицы спиралью через вложенный цикл?

    0xD34F
    @0xD34F
    Десять секунд гугления, находим примерный вариант - надо только порядок поменять, от краёв к центру:

    #include <iostream>
    #include <iomanip>
    #include <bits/stdc++.h> 
    
    using namespace std;
    
    int main()
    {
      const int N = 6;
    
      int m[N][N] = { 0 };
    
      for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
          int x = min(min(i, j), min(N - 1 - i, N - 1 - j));
          m[i][j] = N * N + 1 - (i > j
            ? (N - 2 * x - 2) * (N - 2 * x - 2) + (i - x) + (j - x)
            : (N - 2 * x) * (N - 2 * x) - (i - x) - (j - x)
          );
        }
      }
    
      for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
          cout << setw(5) << m[i][j];
        }
        cout << endl;
      }
       
      return 0;
    }
    Ответ написан
    Комментировать
  • Как скопировать наименования классов всех input элементов в отдельном блоке в массив?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Откуда надо получить классы:

    const inputs = document.querySelectorAll('ol input');

    Получаем уникализированный массив классов:

    const classes = [...new Set(Array.prototype.flatMap.call(
      inputs,
      n => [...n.classList]
    ))];

    Или, получаем всё, что есть:

    const classes = Array
      .from(inputs, n => Array.from(n.classList))
      .flat();
    
    // или
    
    const classes = [].concat.apply(
      [],
      [].map.call(inputs, n => n.className.split(' '))
    );
    
    // или
    
    const classes = [];
    for (const n of inputs) {
      for (const m of n.classList) {
        classes.push(m);
      }
    }
    
    // или
    
    const classes = [];
    for (let i = 0; i < inputs.length; i++) {
      for (let j = 0; j < inputs[i].classList.length; j++) {
        classes[classes.length] = inputs[i].classList[j];
      }
    }
    
    // или
    
    const getClasses = (classList, i, n = classList.item(i)) =>
      n ? [ n, ...getClasses(classList, -~i) ] : [];
    
    const classes = (function get(i, n = inputs.item(i)) {
      return n ? [ ...getClasses(n.classList, 0), ...get(++i) ] : [];
    })(0);
    Ответ написан
    4 комментария
  • Как решить задачу с Promise?

    0xD34F
    @0xD34F Куратор тега JavaScript
    В конструкторе создаём promise, делаем его свойством экземпляра, также делаем свойством экземпляра функцию, разрешающую promise; метод then - вызываем метод then у сохранённого promise, пробрасывая ему полученный параметр, результат вызова кладём на место сохранённого promise:

    class deferred {
      constructor() {
        this.promise = new Promise(resolve => this.resolve = resolve);
      }
    
      then(f) {
        this.promise = this.promise.then(f);
      }
    }

    Но вообще, можно добиться того же поведения и без использования promise. Сохраняем в массив все передаваемые в then функции, при вызове resolve перебираем этот массив, вызываем функции, результат вызова предыдущий используем как параметр следующей:

    class deferred {
      constructor() {
        this.callbacks = [];
      }
    
      then(f) {
        this.callbacks.push(f);
      }
    
      resolve(val) {
        this.callbacks.reduce((res, f) => f(res), val);
      }
    }
    Ответ написан
    1 комментарий
  • Как манипулировать svg, который подключен через тэг object?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Не получается обратиться к элементу по его id.

    А как вы это делаете? Вдруг неправильно? Почему не показали?

    Просто по id (или с помощью любого другого селектора) обращаться нельзя, у внешних SVG отдельное DOM-дерево, оно доступно через свойство contentDocument соответствующего object'а, т.е.:

    const svgDocument = document.querySelector('object').contentDocument;
    const element = svgDocument.querySelector('здесь указываете нужный id или что там вам надо');
    Ответ написан
    Комментировать
  • Как определить событие клика event.target элемента?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Замените click на mousedown. А то сейчас у вас получается так: нажали на выбранный пункт, фокус с .select-list ушёл, и к тому моменту, когда вы отпускаете кнопку мыши, список уже скрылся, соответственно, клик получается по элементу, который был под списком.
    Ответ написан
    Комментировать
  • Как объединить массивы?

    0xD34F
    @0xD34F
    function walk($data, $key, &$result) {
      foreach ($data as $k => $v) {
        if (!array_key_exists($k, $result)) {
          $result[$k] = [];
        }
    
        if (!is_array($v) || array_keys($v) === range(0, count($v) - 1)) {
          $result[$k][$key] = $v;
        } else {
          walk($v, $key, $result[$k]);
        }
      }
    }
    
    function merge(...$arrays) {
      $result = [];
    
      foreach ($arrays as $arr) {
        $key = array_keys($arr)[0];
        walk($arr[$key], $key, $result);
      }
    
      return $result;
    }
    
    $result = merge($array1, $array2);
    Ответ написан
    Комментировать
  • Как вывести массив?

    0xD34F
    @0xD34F
    Рекурсия же:

    $arr = [
      "raz" => [
        "qqq" => [ "6" ],
        "www" => [ 0 ]
      ],
      "dva" => [
        "qqq" => [ 0 ],
        "www" => [ 0 ]
      ]
    ];
    
    function printArr($arr, $path = '') {
      foreach ($arr as $key => $val) {
        if (is_array($val)) {
          printArr($val, $path."[$key]");
        } else {
          echo $path."[$val]<br>";
        }
      }
    }
    
    printArr($arr);
    Ответ написан
    2 комментария
  • Как сделать изначально невидимый до анимации SVG?

    0xD34F
    @0xD34F
    Группируем анимируемые элементы, через set управляем свойством visibility, анимацию запускаем по окончанию действия set'а. Типа так.
    Ответ написан
    Комментировать
  • Как скачать файлы по url?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Нет, так просто не получится - тянуть файлы со сторонних доменов через a[download] нельзя.

    Можно загрузить файл, перегнать его FileReader'ом в data url, и уже в таком виде подсунуть в ссылку. Как-то так.
    Ответ написан
    3 комментария
  • Как установить метки в Яндекс карте во Vue.js приложении?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    Нет гарантии, что карта загрузится быстрее, чем вы получите данные для меток (этого и не происходит, почему и возникает ошибка), поэтому выполнять запрос данных следует после того, как карта будет готова к использованию - т.е., в ymaps.ready.

    UPD. Вынесено из комментариев:

    Я так понял, вы предлагаете код, который находится в функции setMarkers() перенести в initializeYandexMap(), я прав?

    Нет, не правы. Подумайте ещё. Предположим, вы так сделали. Что будет, если карта загрузится раньше, чем данные? Вы ничего не увидите, потому что массив coordinates будет пустым в момент выполнения setMarkers.

    Ещё раз: выполняйте действия последовательно, а не параллельно - сначала загрузка карты, затем загрузка данных. Это самый простой вариант. Параллельная загрузка организовывается немного посложнее - надо обернуть ymaps.ready в промис, и воспользоваться Promise.all.

    Как это может выглядеть - первый вариант, второй (запрос заменён на setTimeout, но думаю суть понятна).
    Ответ написан
    3 комментария
  • Как пронумеровать список в textarea?

    0xD34F
    @0xD34F Куратор тега JavaScript
    textareaEl.addEventListener('paste', function() {
      setTimeout(() => {
        this.value = this.value.split('\n').map((n, i) => {
          const line = i + 1;
          return `${line}. ${n.replace(RegExp(`^${line}\\. `), '')}`;
        }).join('\n');
      });
    });
    Ответ написан
    1 комментарий
  • Как найти и удалить дубли leaflet?

    0xD34F
    @0xD34F
    Получаем массив маркеров, перебираем его, для каждого маркера проверяем наличие маркера с похожими координатами (абсолютное значение разности координат меньше определённого). Если найденный маркер не является тем же, что и текущий проверяемый - удаляем проверяемый. Собрал небольшую демку - можно порасставлять маркеры, вручную и случайно, настраивать допустимую разницу координат, удалять.
    Ответ написан
    1 комментарий
  • Как эмулировать клик по элементу после того, как он отрендерился?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Элемент - представленный в примере - это FileInput (кликать нужно на него, что бы вызвать диалог выбора файлов)

    Нет, ничего у вас не получится. Этот диалог может быть открыт только в результате настоящих действий пользователя (и то не всех: клик, нажатие клавиши - окей; скролл, движение мыши, вызов контекстного меню - нет), а не их имитации. По крайней мере, в Хроме. В Фаерфоксе имитировать можно (UPD. Теперь тоже нельзя).
    Ответ написан
  • Как написать такое регулярное выражение?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Не нужны здесь регулярные выражения:

    const imgs = document.querySelectorAll('img[src*="/test/"]');

    UPD. Оказывается, автор вопроса с первого раза не сумел рассказать, чего ему надо. Вынесено из комментариев:

    это не в dom, а в строке

    Всё равно регулярные выражения не нужны. Парсим строку, ищем нужные элементы, получаем их разметку:

    const div = document.createElement('div');
    div.innerHTML = str;
    const imgsStr = ''.concat(...[].map.call(
      div.querySelectorAll('img[src*="/test/"]'),
      n => n.outerHTML
    ));

    или

    const imgsStr = Array
      .from(
        new DOMParser().parseFromString(str, 'text/html').querySelectorAll('img[src*="/test/"]'),
        n => n.outerHTML)
      .join('');

    или

    const imgsStr = Array.prototype.reduce.call(
      document.createRange().createContextualFragment(str).querySelectorAll('img[src*="/test/"]'),
      (acc, n) => acc + n.outerHTML,
      ''
    );

    UPD. Нет, со второго раза тоже не получилось. Всплыли ещё подробности:

    мне нужно удалить из этой строки все картинки, которые...

    Удалить, так удалить:

    const div = document.createElement('div');
    div.innerHTML = str;
    const imgs = div.querySelectorAll('img[src*="/test/"]');
    for (let i = 0; i < imgs.length; i++) {
      imgs[i].outerHTML = '';
    }
    str = div.innerHTML;

    или

    const { body } = new DOMParser().parseFromString(str, 'text/html');
    body.querySelectorAll('img[src*="/test/"]').forEach(n => n.remove());
    str = body.innerHTML;

    или

    const fragment = document.createRange().createContextualFragment(str);
    for (const n of fragment.querySelectorAll('img[src*="/test/"]')) {
      n.parentNode.removeChild(n);
    }
    str = Array.from(fragment.childNodes, n => n.outerHTML || n.nodeValue).join('');
    Ответ написан
    6 комментариев
  • Как достать информацию с иерархического уровня по клику?

    0xD34F
    @0xD34F Куратор тега React
    Как программно получить индексы Ряда и Ячейки для строки кода
    this.showPillarHandler(p.data[индекс Ряда].data[индекс Ячейки]) ?

    А не надо никаких индексов получать. Передавайте нужный объект в обработчик в самом нижнем компоненте вашей иерархии.

    В компоненте Pillars делаете так: showMachine={this.showPillarHandler}.
    В PillarListItem так: showShelfMachine={showMachine}.
    И в ShelfListItem аналогично: showPlaceMachine={showShelfMachine}.
    Наконец, в PlaceListItem: onClick={() => showPlaceMachine(seat)}.

    P.S. Погуглите, что такое redux.
    Ответ написан
  • Как создать массив с объектами из другого массива?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      groupedPosts() {
        return this.posts.reduce((acc, n) => {
          (acc[n.category] = acc[n.category] || []).push(n);
          return acc;
        }, {});
      },
    },

    UPD. Чего на самом деле хотел автор вопроса, вынесено из комментариев:

    При нажатии на название категории хочу выводить посты и соответствующего массива.

    Добавляем ещё одно вычисляемое свойство - массив категорий:

    categories() {
      return Object.keys(this.groupedPosts);
    },

    И обычное свойство - выбранная категория:

    data: () => ({
      activeCategory: null,
      ...

    На основе массива категорий создаём кнопки, по нажатию на которые будет производиться выбор категории:

    <button
      v-for="n in categories"
      v-text="n"
      :class="{ active: n === activeCategory }"
      @click="activeCategory = n"
    ></button>

    Если категория выбрана - показываем соответствующие посты:

    <div v-if="activeCategory">
      <div v-for="n in groupedPosts[activeCategory]" class="post">
        ...

    https://jsfiddle.net/yxf50qg2/
    Ответ написан
  • Что такое public?

    0xD34F
    @0xD34F
    Я тут начинаю изучать php с фреймворка yii2

    Что в переводе на русский означает "собираюсь стать говнокодером".

    Может лучше вы забудете про yii на ближайшие полгода и начнёте изучать php c собственно php? Чтобы вот таких вот дурацких вопросов не задавать. На него и ответить-то нормально нельзя - учитывая ваши нулевые знания php, это всё равно что объяснять тригонометрию человеку, который складывать-вычитать не научился.
    Ответ написан
    1 комментарий