Задать вопрос
  • Как получить самую давнюю дату, хранящуюся в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const [ date = null ] = arr.map(n => n.date).sort();

    или

    const date = arr.reduce((min, { date: n }) => min !== null && min < n ? min : n, null);

    или

    const date = arr.length
      ? new Date(Math.min(...arr.map(n => new Date(n.date)))).toISOString()
      : null;
    Ответ написан
    Комментировать
  • Как получить самую давнюю дату, хранящуюся в массиве?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    new Date( // чтобы конечный результат был в виде человеко читаемой строки
     Math.min.apply(  // применим функцию поиска минимального элемента в массиве с помощью apply
       null, // контекст не нужен
       arr.map(i => new Date(i.date)) // в качестве массива, среди которого ищем минимум - массив дат, преобразованных в Date
      )
    ).toISOString() // собственно, преобразовываем в человеко понятную строку.


    Ну или нагляднее:
    const dates = arr.map(i => new Date(i.date))
    const minDate = Math.min.apply(null, dates)
    const minDateString = new Date(minDate).toISOString()
    Ответ написан
    Комментировать
  • Как в Google Sheets вывести курс валюты по конкретной дате?

    ForestAndGarden
    @ForestAndGarden
    Совершенствовать среду обитания
    У вас массив 2×2. Нужно получить значение из определённой позиции — для этого есть функция INDEX. Вуаля!
    =INDEX(GoogleFinance("Currency:USDRUB";"price";"20.10.2022");2;2)
    Ответ написан
    5 комментариев
  • Как эффективно получить данные со страницы из элемента script?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Google Apps Script не подготовлен для Cheerio.

    Следует избегать загрузки этого модуля.

    Пример без него.

    const url = 'https://www.pdfah.com/product/4944/hylo-gel-lubricating-eyes-drops-%E0%B8%99%E0%B9%89%E0%B8%B3%E0%B8%95%E0%B8%B2%E0%B9%80%E0%B8%97%E0%B8%B5%E0%B8%A2%E0%B8%A1%E0%B8%8A%E0%B8%99%E0%B8%B4%E0%B8%94%E0%B9%80%E0%B8%88%E0%B8%A5-10ml-300%E0%B8%AB%E0%B8%A2%E0%B8%94';
    
    function getData() {
      const data = UrlFetchApp.fetch(url);
      const content = data.getContentText();
      const exec = /application\/ld\+json">(.*?)<\/script>/gi
        .exec(content.replace(/[\r\n]+/g, ' '));
      if (exec) {
        const product = JSON.parse(exec[1]);
        console.log(product);
      }
    }


    В Таблице https://docs.google.com/spreadsheets/d/1DQPeBVHMeQ...
    Ответ написан
    Комментировать
  • Как отследить изменения?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Одним из основных способов является подписка на триггер изменений в Таблице, который реализуется в Google Apps Script.

    Вы можете построить свое решение на основе примера https://qna.habr.com/q/1207030#answer_2234340
    Ответ написан
    Комментировать
  • Как передать параметры из функции в QUERY?

    @remaikee Автор вопроса
    Огромное всем спасибо за присланные ответы! Они натолкнули меня на мысль и задачка была решена!

    Собственно хотел заставить работать встроенную гугловскую функцию QUERY с наименованиями полей в передаваемой таблице. Решение напрашивалось самое простое - заменить в запросе наименования полей на соответствующие наименования Col1, Col2 и т.д. Надо было только найти красивое решение как перехватывать запрос и на лету изменять его:)

    Ниже найденное мною решение. Возможно кто-то решит его доработать - присылайте свои варианты :)

    Решение:

    В Google.Docs есть такая штука, как именованные функции: https://support.google.com/docs/answer/12504534

    В итоге я через именованные функции сделал свою:
    M_QUERY(диапазон, запрос)
    которую описал как:
    =QUERY({диапазон}; Q(диапазон; запрос))

    а в Apps Script описал функцию Q, которая и обрабатывает передаваемые запросы:
    function Q(table, query){
      console.log(query);
      if (table[0].map){
        table = table[0];
        for(var key in table){
          query = query.replaceAll('`'+table[key]+'`', 'Col'+(1+Number(key)));
        }
      }
      return query;
    }


    Собственно все подготовительные операции проведены и можно в таблицах гугл использовать созданную функцию M_QUERY

    Берём таблицу вида:
    6356da09f2f86969780191.png
    где первая строка содержит наименования полей

    и на требуемом листе пишем формулу:
    =M_QUERY(1:1000; "select `ID` where `ASIGNED_BY` like '%Иванов%'")
    "1:1000" - заменяем на диапазон, содержащий исходные данные :)

    Профит!
    Ответ написан
    Комментировать
  • Как передать параметры из функции в QUERY?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Формулы не поддерживают распределение аргументов, т.н. spread arguments. Даже если вы переопределите именованную функцию, то ничего не изменится, т.к. нет метода.

    Единственное, что можно сделать - обращаться к результатам функции по порядковому номеру в массиве

    function Q(table, query, i) {
      return [table, query][i];
    }


    =QUERY(
      Q({1\2\3\4;5\6\7\8};"select Col1, Col2";0);
      Q({1\2\3\4;5\6\7\8};"select Col1, Col2";1);
      0
    )


    635652c9499e5439642174.png

    Пример в Таблице https://docs.google.com/spreadsheets/d/1Tb-b5ZTW9L...

    Я подозреваю, что вам нужно что-то другое, а не передача аргументов неявным способом.
    Ответ написан
    Комментировать
  • Как узнать, какой процесс обращается дисководу?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Используй Process Monitor, особое внимание удели всем процессам svchost.exe
    Самый частый случай - это "svchost.exe -k secsvcs " :
    Модуль ресурсов Защитника Windows
    Ответ написан
    Комментировать
  • Как реализовать 2d физику?

    @MarkusD
    все время мелю чепуху :)
    Нужную литературу ты сможешь найти здесь.
    Твой раздел - девятый.
    Но чтобы использовать знания для разработки физики, тебе потребуются знания второго, третьего, четвертого и пятого разделов.
    А если хочешь чтобы физика была быстрой, то потребуются еще и знания седьмого раздела.

    Игровая физика - это очень сложная область, значительно сложнее компьютерной графики. Без добрых десяти лет в инженерии П.О. полноценно зайти в разработку физики будет проблематично.
    Но есть выход. Можно использовать уже готовые физические модели для своих игр. Библиотеки физики.
    Игнорировать их не стоит и для того, чтобы самостоятельно изучать моделирование физики. Используемые там подходы очень полезно понимать для личного обучения.

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

    ForestAndGarden
    @ForestAndGarden
    Совершенствовать среду обитания
    Используйте функцию ВПР (на английском — VLOOKUP).
    Ответ написан
    1 комментарий
  • Можно как-то исправить автоперевод от Google?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Где то в подвале добавляете вот такой скрипт

    Ответ написан
    1 комментарий
  • Как сделать анимацию "водных разводов"?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.


    Ещё 7 вариантов анимации








    Ответ написан
    Комментировать
  • Зачем SSD неразмеченная область?

    @Crazypill
    Современные микросхемы флэш-памяти хранят 2(MLC), 3(TLC) или 4(QLC) бита информации в 1 ячейке. Чем большая плотность хранения, тем меньшая скорость записи. Поэтому большинство современных SSD умеют при записи использовать незадействованные ячейки в режиме SLC-кэша(по 1 биту в ячейку), то есть записывать быстро но в 2-4 раза менее плотно, до исчерпания свободных ячеек. После исчерпания свободных ячеек контроллер переходит в режим плотной но медленной записи. Если вы оставляете X Гбайт неразмеченных, то при записи у вас гарантированно быстро будут записываться X/2(MLC), X/3(TLC) или X/4(QLC) Гбайт.
    Ответ написан
    2 комментария
  • Как при создании строки удалять ненужный символ в ячейке заданного столбца?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Если при вводе руками, то можно использовать такой код

    const isFormula_ = value => String(value).charAt(0) === '=';
    const editValue_ = value => isFormula_(value) ? String(value).substring(1) : value;
    
    function onEdit(e) {
      const sheet = e.range.getSheet();
      if (
        sheet.getName() === 'Пример' && 
        e.range.getRow() > 1 && 
        e.range.getColumn() === 8 && 
        isFormula_(e.value)) {
        e.range.setValue(editValue_(e.value));
      }
    }


    Пример в Таблице https://docs.google.com/spreadsheets/d/1qe4gHivzlO...
    Ответ написан
    1 комментарий
  • Что означают эти формулы?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    "E" (это вообще-то сигма из греческого алфавита) - знак суммы. выражение справа надо просуммировать, подставив вместо k все числа от 3 до n. П - это знак произведения. Выражение справа надо перемножить для всех указанных значений i.

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

    Ваше решение в вопросе почти правильное. Проблема только в том, что вам надо подсчитать что-то вроде c1*a1*a2*a3 + c2*b1*b2*b3. А вы используете одну и ту же переменную для подсчета каждого слагаемого и общей суммы. У вас получается что-то вроде (c1*a1*a2*a3+c2)*b1*b2*b3
    Ответ написан
    2 комментария
  • С чего начать системному администратору в школе?

    @Drno
    1. - беги оттуда... работы дохера, денег нифига
    А по теме -

    надо создать "карту" сети, где будут ПК которым нужен доступ, спланировать прокладку сети.
    далее можно поделить участки на "квадраты", чтобы приводить туда 1 кабель и ставить свитч, а не вести кучу проводов до каждого ПК
    после этих подсчетов возвращайтесь - будем подбирать оборудование
    Ответ написан
    10 комментариев
  • Как массово скачать файлы по списку?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Т.е. не получится это сделать с помощью wget в командной строке, т.к. куков не будет

    Кто сказал?
    https://qna.habr.com/q/444245
    wget --no-check-certificate --quiet \
      --method GET \
      --timeout=0 \
      --header 'Cookie: PHPSESSID=ocqfdbv0kv6qs5jv4at6uk36pf' \
       'https://test-mis.ru/api/****************************************'
    Ответ написан
    Комментировать
  • Как элементы массива сделать значениями объекта?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Мое решение:

    let arr = ['a', 'b', 'c', 'd', 'e'];
    let obj = {};
    for (let i = 0; i <= arr.length; i++) {
    obj[i + 1] += arr;
    }
    console.log(obj);


    Ну Вы были относительно близко.
    1. Зачем Вы делаете += ? Вы же не плюсуете к чему то, а назначаете значение. То есть
    - obj[i + 1] += arr;
    + obj[i + 1] = arr;

    2. Зачем Вы прибавляете весь arr, когда Вам нужен элемент массива, а не весь массив. То есть:
    - obj[i + 1] = arr;
    + obj[i + 1] = arr[i];

    3. Цикл выполнится 6 раз, так как у Вас от нуля до длины массива - 5. То есть, 0,1,2,3,4,5. Вместо этого можно начать с 1, и в итоге тогда:
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let obj = {};
    for (let i = 1; i <= arr.length; i++) {
    obj[i] = arr[i-1];
    }
    console.log(obj);


    Ну и как уже сказали выше, можно через reduce. Тогда будет значительно короче:
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let obj = arr.reduce((a, c, i) =>  (a[i+1] = c, a), {});
    console.log(obj);
    Ответ написан
    Комментировать
  • Как элементы массива сделать значениями объекта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте лучше reduce:
    let arr = ['a', 'b', 'c', 'd', 'e'];
    let obj = arr.reduce((a, v, i) => { a[i+1] = v; return a; }, {});
    
    console.log(obj);

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

    vfreelancer
    @vfreelancer
    php
    - ненормально
    - радуйтесь
    - наймите втихоря ментора и платите ему часть зарплаты за консультации
    Ответ написан
    Комментировать