• Какая логика у перебора массива таким способом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    i — это индекс массива — номер позиции в нём, считая от 0.
    arr[i]значение, которое лежит в массиве arr в позиции i.
    ещё проще
    Массив представьте как ряд одинаковых коробочек, юпронумерованных от 0 до N.
    В коробочках что-то лежит. Обратиться к коробку можно по имени массива и номеру ячейки: arr[4] например – это пятая по счету коробка, т.к. счет идёт от 0.


    Последовательность получается примерно такая:
    min = 12;

    i = 0; arr[i] = 12; arr[i] меньше min? НЕТ. идём дальше
    i = i + 1
    i = 1; arr[i] = 5; arr[i] меньше min? ДА. min становится 5; идём дальше
    i = i + 1
    i = 2; arr[i] = 8; arr[i] меньше min? НЕТ. идём дальше
    i = i + 1
    ...
    i = 4; arr[i] = 3; arr[i] меньше min? ДА. min становится 3; идём дальше
    ...
    for закончил работу, min так и остался равным 3
    Ответ написан
    Комментировать
  • Как называется такой эффект?

    Возможно, "elastic scrolling" или "stretching"
    Ответ написан
    Комментировать
  • Не могу найти аналог ScreenMarker для макбука m, какая программа является анлогом?

    ScreenBrush смотрели?

    Стоит написать в вопросе, какие Вы уже рассматривали, и чем не подошли.
    Ответ написан
  • Объясните, почему так работает код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    потому, что воспринимает как десятичную точку
    2000.123

    Вот так, например, сработает: 2000.0.toLocaleString() — тут уже понятно, что не десятичная точка. Но я — за скобки!
    Ответ написан
    2 комментария
  • Как в js обновить список нод в querySelectorAll и их EventListener после удаления ноды?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    слушайте событие клика как jQuery – не на каждой кнопке по отдельности, а один раз на общем родителе: на этом .show-cart

    В обработчике проверяйте, по чему именн, там, где-то в дочерних, кликнули (см. event.target). Если у кликнутого есть класс .delete-item, то действуем далее.

    Слушать на общем родителе – называется волшебным термином «делегирование событий».
    Ответ написан
    1 комментарий
  • Как подставить значение переменной в javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробуйте так
    const centerString = '56.964949, 60.623745';
    
    // строку разбиваем в массив чисел
    const center = centerString.split(', ').map(Number);
    const zoom = 12;
    
    const params = {
      center,
      zoom,
    };
    
    const init = () => {
      const myMap = new ymaps.Map("map", params);
    }
    
    ymaps.ready(init);
    Ответ написан
    Комментировать
  • Как удалить из массива?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Так вы только копируете значение (строку  "1") из подмассива в переменную:
    $del = $arr[1]['one'];
    В переменную $del записался байт ASCII-сивола "1", условно говоря.

    unset здорового человека именно такой: unset($arr[1]['one'])

    unset курильщика можно организовать записью ссылки на массив в переменную. Но конкретный ключ всё равно придётся указывать внутри unset:
    $arr = [ 1 => [
        'one' => '111',
        'two' => '222',
    ],  ];
    
    $del = & $arr[1]; // ссылка на массив
    unset($del['one']); // удаление ключа из массива по ссылке
    
    print_r($arr); // результат Array ( [1] => Array ( [two] => 222 ) )


    Попытка удалить полную ссылку на элемент не сработает, т.к. она просто удалит "связь" этой переменной $del с элементом исходного массива. А массив останется без изменений.
    $del = & $arr[1]['one']; // ссылка на элемент, который хочется удалить
    unset($del); // не сработает. Просто разорвёт ссылку $del на элемент
    Ответ написан
    2 комментария
  • Как запустить цикл for of для длинны массива?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Обычный цикл чем не цикл?
    const chain = async times => {
      for (let n = times; n > 0; n--) {
        console.log(`${n} starting..`);
        await new Promise(resolve => setTimeout(resolve, 800));
        console.log(`${n} ..finished`);
      }
    };
    
    chain(4).then(() => console.log('Done'));
    Ответ написан
    Комментировать
  • Как можно укоротить код в foreach?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    /**
     * Переделать массив объектов, добавив префикс названию каждого из свойств
     * @param array<object> $srcArray исходный массив объектов
     * @param string $prefix строка, которую добавить перед названием каждого из свойств
     */
    $remap = fn (array $srcArray, string $prefix) => array_map(
        function ($obj) use ($prefix) {
            $keyValues = get_object_vars($obj);
            $keys = array_keys($keyValues);
            $values = array_values($keyValues);
            return (object) array_combine(
                array_map(fn ($key) => $prefix . $key, $keys),
                $values
            );
        },
        $srcArray
    );


    Test
    // Test
    $babySitters = [
        (object) ['a'=>'A1', 'b'=>'B-1'],
        (object) ['a'=>'A2', 'b'=>'B-2'],
        (object) ['a'=>'A3', 'b'=>'B-3'],
        (object) ['a'=>'A4', 'b'=>'B-4', 'c'=>'C4'],
    ];
    
    $result = $remap($babySitters, 'babysitter_');
    
    echo json_encode($result);


    Результат:
    [
      {
        "babysitter_a": "A1",
        "babysitter_b": "B-1"
      },
      {
        "babysitter_a": "A2",
        "babysitter_b": "B-2"
      },
      {
        "babysitter_a": "A3",
        "babysitter_b": "B-3"
      },
      {
        "babysitter_a": "A4",
        "babysitter_b": "B-4",
        "babysitter_c": "C4"
      }
    ]

    Ответ написан
    Комментировать
  • Почему при компиляции React приложения возникает ошибка "JavaScript heap out of memory"?

    Узнайте, каков сейчас лимит размера «кучи» можно через v8.getHeapStatistics() в поле heap_size_limit, например, из командной строки:
    node -e 'const { getHeapStatistics } = require("node:v8"); console.log(getHeapStatistics().heap_size_limit);'

    Будет результат в байтах.

    У меня он по умолчанию 2Gb.

    И попробуйте его увеличить, например, установить размер в 4 Гб:
    export NODE_OPTIONS=--max_old_space_size=4096
    Тут уже не в байтах, а в Мб указывается.

    Потом запускайте сборку.

    Но всё это не поможет, если в системе в принципе мало памяти. Тогда можно попробовать включить swap.
    Ответ написан
  • Как рисовать прямоугольники в ffmpeg?

    ffmpeg \
      -i /media/01.jpg \
      -vf "drawbox=x=1400:y=200:w=200:h=500:t=3:c=yellow" \
      -update \
      -frames:v 1 \
      /media/777003.jpg
    Ответ написан
  • Как заблокировать работу с окном браузера при перезагрузке страницы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно начать перехватывать вообще все события клика по html>body на начальной стадии "capture", и дальше не пропускать. Что-то типа
    document.body.addEventListener('click', e => {
        e.stopPropagaion();
        e.stopImmediatePropagation();
        e.preventDefault();
      }, { capture: true });
    Аналогично можно и для клавиатурных событий попробовать.
    Ответ написан
    Комментировать
  • Как числа из строки поместить в массив?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $str = ' 86, 92, 98, 104, 110';
    $arr = json_decode("[ $str ]");
    Ответ написан
    Комментировать
  • Как вывести оставшееся время до определенного часа?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно прибавлять 24 часа там, где что-то меньше чего-то..

    Примерно так, наскоро. Подробно не проверял:
    function workHours(on, off, testNow = null) {
      // TODO: validate input
      const now = testNow ?? new Date().getHours();
      const a = Number(on);
      let b = Number(off);
    
      const format = (status, nextTime) => ({ status, next_time: nextTime });
    
      if (a === b) {
        return format(true, 0);
      }
    
      if (a > b) {
        b += 24;
      }
    
      if (now >= a && now < b) {
        return format(true, 0);
      }
    
      if (now < a) {
        return format(false, a - now);
      }
    
      return format(false, a + 24 - now);
    }

    Тесты

    // Тесты тесты
    const tests = [
      [9, 17, 10, { status: true, next_time: 0 }],
      [9, 17, 8, { status: false, next_time: 1 }],
      [9, 17, 17, { status: false, next_time: 16 }],
      [19, 17, 17, { status: false, next_time: 2 }],
      [19, 19, 17, { status: true, next_time: 0 }],
    ];
    
    const eq = (a, b) => Object.entries(a).every(([k, v]) => b[k] === v);
    
    tests.forEach(test => {
      const [on, off, now, expected] = test;
      const result = workHours(on, off, now);
      const testResult = eq(result, expected);
      if (testResult) {
        console.log('Passed', {on, off, now, result});
      }
      console.assert(testResult, test);
    });
    Ответ написан
    Комментировать
  • Как объединить строки в файле gedcom?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Готовый модуль: https://www.npmjs.com/package/gedcom
    Ответ написан
    Комментировать
  • Как поменять местами максимальное и минимально число в массиве?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    попробуйте представить, как оно будет работать, в замедленном режиме.
    Что, если массив не 5 чисел, а несколько миллионов, длиннющий?
    Хорошо бы его проходить только 1 раз. И по пути находить минимум и максимум, и их индексы.
    Как?
    Сначала и min и max это первое значение, а оба индекса 0.
    Далее с очередным элементом массива смотрим, больше ли он нашего "максимума"? Если да, то он становится максимумом, а текущий индекс — индексом максимума. То же с минимумом. Если меньше текущего минимума, то ...
    Прошли весь массив — ок, имеем минимум, максимум, их индексы.
    Меняем местами элементы по индексам.
    Ответ написан
    Комментировать
  • Как сказать «ничего не делаем» используя условные операторы?

    несколько проверок с indexOf() можно заменить на одну imgName.matches(/s-[1-4]\./),

    условие isBlank() лучше ставить первым

    пустой блок если нужен для брейкпоинта, можно там поставить строчку assert true;
    Ответ написан
    Комментировать
  • Как хранить функцию в массиве?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Всё в документации: Обращение к функциям через переменные ("Variable functions" на англ.)
    Ответ написан
    Комментировать
  • Как сделать алгоритм фокусировки?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    В фотокамерах автофокус обращает внимание на несколько контрольных точек кадра: центр, по третям и т.д. Алгоритмы видимо пробуют разные варианты фокусировки и останавливаются на том, что даёт максимум контрольных точек в фокусе.

    Само определение в фокусе / размыто: наличие высокочастотных деталей в исследуемой области. В размытом изображении мелких контрастных переходов нет, все детали крупнее какого-то порога.

    Алгоритм – применить High-pass фильтр к картинке, и смотреть, есть ли что, отличное от серого, и как его много.
    пример

    Выбрал две области на картинке (маленькие зеленые квадраты) – к которым применен high-pass фильтр с радиусом 2px в Photoshop. Результаты рядом и увеличены, в желтых квадратах:
    65b132a196b6c677954361.jpeg
    Ответ написан
    Комментировать
  • Как получить таблицу Google sheets как массив?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    вроде бы так должно получиться:

    - console.log(data.data.values)
    + console.log(data.values)

    Метод spreadsheets.values/get возвращает объект ValueRange со свойствами range, majorDimension и values. Последнее и интересует.
    Ответ написан
    Комментировать