• Какой метод перебора массивов JS использовать и как?

    0xD34F
    @0xD34F Куратор тега JavaScript
    map/filter:

    arr.map((n, i) => n ? i : null).filter(n => n !== null)
    // или
    arr.map((n, i) => n ? i : NaN).filter(n => n === n)
    // или
    arr.map((n, i) => !!n && i).filter(Number.isInteger)
    // или
    arr.map((n, i) => !n || i).filter(n => n !== !0)

    reduce:

    arr.reduce((acc, n, i) => n ? [ ...acc, i ] : acc, [])
    // или
    arr.reduce((acc, n, i) => (n && acc.push(i), acc), [])

    или, если надо изменить текущий массив, а не создавать новый

    for (let i = arr.length; i--;) {
      if (arr[i]) {
        arr[i] = i;
      } else {
        arr.splice(i, 1);
      }
    }
    
    // или
    
    arr.reduceRight((_, n, i, a) => n ? a[i] = i : a.splice(i, 1), 0);
    
    // или
    
    arr.splice(0, arr.length, ...любое_выражение_с_map/filter_или_reduce_из_показанных_выше);
    
    // или
    
    let count0 = 0;
    
    for (const [ i, n ] of arr.entries()) {
      arr[i - count0] = i;
      count0 += !n;
    }
    
    arr.length -= count0;
    Ответ написан
    Комментировать
  • С помощью чего можно реализовать такой график?

    @DimaDolgoter
    Ответ написан
    Комментировать
  • Как перевернуть строку рекурсией?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const reverse = str => str.length < 2 ? str : reverse(str.slice(1)) + str[0];

    или

    const reverse = ([ c, ...str ]) => c ? reverse(str) + c : '';
    Ответ написан
    8 комментариев
  • Переопределение функции после выполнения?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Но если на функцию ссылается объект...

    Ну так это совсем другая ссылка, не та, что вы используете при переопределении.

    Указывайте контекст при переопределении, т.е., замените

    foo = function () {

    на

    this.foo = function () {
    Ответ написан
    Комментировать
  • Почему не удается сжать видео после оцифровки видеокассеты???

    nidalee
    @nidalee
    А можно еще попробовать в H265 с битрейтом, эдак, на 8М (можно подкрутить по вкусу).
    ffmpeg -i "VHS-01.mpg" -c:v libx265 -b:v 8M -c:a aac -b:a 128k "VHS-01.mp4"
    Сжиматься должно еще дольше, чем по совету с H264, но и объем будет меньше. H265 на данный момент сжимает лучше всех.
    А если вам времени совсем не жалко, то:
    ffmpeg -y -i "VHS-01.mpg" -c:v libx265 -b:v 8M -x265-params pass=1 -an -f mp4 NUL && ^
    ffmpeg -i "VHS-01.mpg" -c:v libx265 -b:v 8M -x265-params pass=2 -c:a aac -b:a 128k "VHS-01.mp4"
    Это все под Windows, если что. Я делаю через bat-файлы.
    Вот здесь подробнее, плюс разобраны примеры с CRF.

    Если у вас есть видеокарта NVIDIA достаточно новая, то можно скачать Adobe Media Encoder и\или Adobe Premiere, поставить на него плагин и просчитать через NVENC - там есть и H264, и H265 (предупреждаю, на пиратку версии 2018+ H.265 встает кое-как). Правда, сжимают они все же хуже ffmpeg-а (по соотношению качество\объём).
    Ответ написан
    1 комментарий
  • Как сделать функцию которая принимает любое количество массивов и удаляет из каждого массива первый элемент?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    changeCollection как этой главной функции указать то что будет принимать сколько угодное количество массивов , а последним будет обработчик ?
    В современном js вот так: changeCollection(...arrays, handler)
    В arrays будет массив с переданными массивами.

    Если по классике, то вот так:
    function changeCollection() {
        var handler = arguments[arguments.length - 1];
        
        for (var i = 0; i < arguments.length - 1; i++) {
          var array = arguments[i];
          
          handler(array);
        }
    }


    Кстати, обратите внимание, что массивы в js передаются по ссылке, поэтому изменяя переданные аргументы вы изменяете и оригиналы:
    function changeCollection() {
      var handler = arguments[arguments.length - 1];
        
      for (var i = 0; i < arguments.length - 1; i++) {
        var array = arguments[i];
          
        handler(array);
      }
    }
    
    function deleteFunc(array) {
      array.shift();
    }
    
    var one = [1 ,2 ,3];
    var two = ['b', 'c'];
    
    changeCollection(one, two, deleteFunc)
    
    console.log(one, two); // [2, 3] ['c']

    Если вас такое поведение не устраивает, нужно делать копии и изменять и возвращать их. Для этого лучше воспользоваться готовыми библиотеками и не писать свой велосипед. В современном js, опять же, можно воспользоваться встроенными средствами: const clone = [...original];. Но если у вас внутри массивов не примитивы и вы изменяете элементы, то нужно делать глубокое копирование.
    Ответ написан
    3 комментария
  • Как сделать разный интервал на таймер?

    SagePtr
    @SagePtr
    Еда - это святое
    Никак. Можно функцию вызывать через setTimeout (он одноразовый в отличие от setInterval) и внутри функции по-новой назначать setTimeout, с той же функцией, но уже другим временем.
    Ответ написан
    Комментировать
  • Как работает этот кусок кода на js?

    0xD34F
    @0xD34F
    Но что возвращает return this.on(...); ? Если ничего, то в чем суть?

    А вы откройте код метода on, и посмотрите. Я бы предположил, что он возвращает this - чтобы сделать возможным method chaining.

    UPD. Ну да, так и есть. Нашёл код модуля, о котором вы говорите - VideoStream наследуется от EventEmitter'а, в документации к которому насчёт метода on прямым текстом сказано, что

    Returns a reference to the EventEmitter, so that calls can be chained
    Ответ написан
    1 комментарий
  • Где почитать о шаблонах проектирования javascript?

    @AlexKindGeek
    Мне понравилась эта
    Ответ написан
    Комментировать
  • Как создать массив из объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const arr = Object.entries(obj).map(([ k, v ]) => ({ id: +k, name: v.nameEn }));
    Ответ написан
    Комментировать
  • Как самому оценить достиг ли ты junior web development?

    rockon404
    @rockon404
    Frontend Developer
    Пройдите техническое интервью в любую нормальную компанию на позицию junior web developer и узнайте.
    Подобные интервью хорошо выявляют слабые места и пробелы в знаниях, если они есть.
    Ответ написан
    Комментировать
  • Что такое производная?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Изучил много литературы на эту тему, попытался разобраться досконально с этой производной, знаю определения формулы, понимаю геометрический и физический смысл производной.

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

    Не могли бы вы объяснить это простыми словами

    Давай с элементарного геометрического смысла и начнём: пусть у тебя есть график дифференцируемой функции y=f(x), это такая непрерывная линия. А ты -- очень маленький и стоишь на этой линии. y показывает на север, x -- на восток, а линия, например, уходит на северо-восток. Ты настолько маленький, что тебе кажется, что линия вблизи тебя -- прямая. Производная f'(x) говорит тебе, насколько линия наклонена к направлению на восток в точке x. Т.е. если f'(x) = 2 в точке x где ты стоишь, то если ты пройдёшь 1 шаг на восток, нужно будет пройти 2 шага на север, чтобы вернуться на линию.

    Все эти "бесконечно малые" можно интерпретировать как "настолько маленькие, чтобы поведение функции заметно не менялось", т.е. что функция "почти прямая" в этом масштабе, и при дальнейшем уменьшении ничего не меняется.
    Ответ написан
    4 комментария
  • Агрегация большого кол-ва записей из БД?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Посоветую elasicsearch. Закидывайте в него свои данные (в вашем случае подойдет и logstash). Индексы бейте или на месяцы или на недели, организуйте их по годам/месяцам/дням через алиасы. Отчеты можете делать или через kibana, или сами дергать агрегированные данные из своих приложений. Индексы удобно ротировать, архивировать и удалять старые.
    И будет щазтие.
    Ну и да, если у вас только аналитика этих данных, то мускул здесь совсем не нужен!
    Ответ написан
    2 комментария
  • Защита сайта WordPress от Заказчика?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Ломать сайт заказчику - не нужно. Это не профессионально и не этично.
    Правильно - не заливать сайт на его хостинг до оплаты.

    Жуликов, которые пытаются нажиться - гораздо больше, чем адекватных заказчиков. Всех не воспитаете, вдобавок есть приличный шанс подпортить себе и настроение и репутацию и убить время зря. А если заказчик еще и докажет, что вы зашли на его хостинг, что-то сломали и он понес ущерб, то еще и засудить сможет, а вы его - нет, поскольку судя по всему, вы с ним работаете не по договору.
    В общем - либо заливайте после оплаты, либо забивайте на клиента и ищите нормальных.
    Ответ написан
    Комментировать
  • Защита сайта WordPress от Заказчика?

    zamboga
    @zamboga
    Аналитика данных, BI-аналитика, дашборды
    Поддерживаю остальных комментаторов и отвечавших -- залейте на свой хостинг, пусть заказчик хоть обтестируется, потом оплата 95% и заливка на его хостинг. Иначе с высокой долей вероятности вы не увидите денег.

    Ну или оформите БС (безопасная сделка) на любом фрилансном ресурсе -- тогда можете и на его хостинг залить.
    Ответ написан
    Комментировать
  • Как запретить загрузку сайта при отключенном javascript в браузере?

    @trofimovdev
    Python
    Что-то в этом духе (JQuery, но можно переписать и на нативном JS):
    $(document).ready(function(){
        $("head").append($("<link rel='stylesheet' href='style.css' type='text/css'>"));
    });


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

    @soledar10
    html css3 js jquery
    str.split(' ').join('')
    Ответ написан
    Комментировать
  • Как создать безупречный биометрический тест?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Сложностей не боимся.

    а чо бояться, на тостере же дадут готовое решение сразу))

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

    почему бы не устроить конкурс со стимулирующей наградой?

    Вопрос не такой простой чтоб сесть и на коленке накидать и/или тем более рассказывать бесплатно решение какое-то уникальное.
    Ответ написан
    2 комментария