• Функция в качестве параметра?

    @Alex_87 Автор вопроса
    twobomb, Спасибо, что объясняешь! Я обязательно сейчас прочитаю твою ссылку. Наверное, у меня возникает этот вопрос потому, что я привык, что объявление - это:
    const/let/var a = что-то;
    const/let/var b = что-то;
    А это function(a, b) в качестве объявление, я не понимаю. Где, в какой статье, рассказано, про такое объявление?
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    Вариант 1 вернёт результат
    return f(b,a);
    Вариант 2 что возвращает? И откуда он видит a, b. Почему он не видит те же a b и если мы убираем return function(a, b) { ?

    return function(a, b) {
                     return f(b,a);
                }
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    twobomb, Скажите пожалуйста, а почему нельзя написать таким образом:

    var flip = function(f) {     
                     return f(b,a);
             }


    Я убрал return function(a, b)
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    У меня только вопрос. А почему нельзя сделать так? Я убрал: return function(a, b)
    const flip(f) => (a, b) => f(b, a);
    
    function flip(sourceFunction) { 
        return sourceFunction(b, a);
    }
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    Огромное спасибо. Немного лучше понял, когда вы перевели код на старый синтаксис!
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    Максим Ленский, Слушай, чувак! Ты не обнаглел? Брысь отсюда с моей темы. Создай свою!
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    twobomb, Спасибо! А по моему решению, можете прокомментировать? Вот передали sub в Функцию const flip(f) => (a, b) => f(b, a);
    Что здесь происходит? Когда в функцию передаётся обычный, числовой параметр, к примеру
    function (a, b){
    return a + b;
    }
    Здесь вопросов по работе не возникает! Но что происходит, когда мы передаём в качестве аргументов функцию?

    const sub = (a, b) => a - b;
    const reverseSub = flip(sub);
    sub(5, 3); // 2
    reverseSub(5, 3); // -2
    
    const flip(f) => (a, b) => f(b, a);
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    Сергей Соколов, У вас есть какие-то версии по моему вопросу?
  • Функция в качестве параметра?

    @Alex_87 Автор вопроса
    Спасибо за предложенный второй вариант решения! У меня по первому вопрос. Не понимаю, как это работает. Саму тему знаю. Решал другие задачи. Но конкретно этот момент не объясняется вообще. А я хочу понять!
  • Объект первого класса?

    @Alex_87 Автор вопроса
    Сергей Сергей, хорошо, спрошу по-другому. Переведите пожалуйста эти две строчки на старый синтаксис:
    identity(v => v)('run'); // run
    // (v => v)(v => v)('run') // run
  • Как решить задачу на тему функции?

    @Alex_87 Автор вопроса
    ksnk,
    "Да, получается 15. А потом в нижних строках дополнительно проверяем, что не выскочили за пределы строки и если выскочили - ставим длину как надо." - ааа, точно) Вот запутанно. Интересно, с точки зрения правильности структурирование кода, как было бы лучше сделать? Я к тому, что вся это лестница из if выглядит слишком топорно. Уверен, что есть более изящные и лаконичные решение.

    Да, тернарные прошли! Но опять таки, пользоваться ими нужно тоже с умом, ведь в отличие от if/else, тернарные являются выражением, а не инструкции. Плюс, тернарный оператор удобно применять там, всё можно уместить в одну строку!
    По поводу Math.min - Math.max , мы не проходили явно подобные темы. Конечно, я знаю, что у строк, массивов, объектов, есть свои собственные методы
  • Как решить задачу на тему функции?

    @Alex_87 Автор вопроса
    ksnk, А вот учительское решение:
    export default (str, index = 0, substrLength = str.length) => {
      if (index >= str.length) { // если начальный индекс выходит за границу слова справа,
        return ''; // то возвращаем пустую строку
      }
    
      // В учительском решении нормализация сводится к подготовке всего двух переменных:
      // currentIndex и lastIndex — они формируют диапазон,
      // из которого будет складываться итоговая подстрока.
    
      // определяем, где находится первый элемент (его позиция в str)
      // формируемой подстроки
      const currentIndex = index < 0 ? 0 : index;
    
      // определяем, где находится последний элемент (его позиция в str)
      // формируемой подстроки
      let lastIndex = currentIndex + (substrLength - 1);
    
      if (substrLength < 0) { // обрабатываем ситуацию, когда substrLength отрицателен
        lastIndex = currentIndex;
      } else if (lastIndex > str.length - 1) { // если конечный индекс выходит за границу строки,
        lastIndex = str.length - 1; // то считаем, что он равен индексу последнего элемента в str
      }
    
      // генерируем подстроку result,
      // "вырезая" её из исходной строки str
      let result = '';
      for (let i = currentIndex; i <= lastIndex; i += 1) {
        result = `${result}${str[i]}`;
      }
    
      return result;
    };


    Я не понимаю формулу получение последнего элемента(и вообще, зачем это нужно. Почему не ограничиваться длиной строки)
    // определяем, где находится последний элемент (его позиция в str)
      // формируемой подстроки
      let lastIndex = currentIndex + (substrLength - 1);


    Вот предположим, у нас есть слово из 10 символов. Мы находимся, к примеру, на 5. Так что получается по этой формуле, что последний символ у нас 15? (10 + 5)
  • Как решить задачу на тему функции?

    @Alex_87 Автор вопроса
    ksnk, сработало) Спасибо! Сейчас рассмотрю некоторые моменты:
    if (start+len > str.length) {
        len = str.length-start;
      }

    и
    for(let i = start; i<start+len; i++){
          result += str[i];
        }

    Интересует это вычитание и сложение len и старт
  • Как решить задачу на тему функции?

    @Alex_87 Автор вопроса
    ksnk, я понимаю! Но если отвлечься от названии(я уже переписал всё на len)... скажите, в чём ещё может быть ошибка?
  • Как решить задачу на тему функции?

    @Alex_87 Автор вопроса
    так у меня end - это и есть длина строки. Смысловая нагрузка данного параметра никак не вяжется с логикой, я понимаю) Признаю, ошибся!
  • Функциональный подход решение задачи с массивом?

    @Alex_87 Автор вопроса
    Шохрух Шаймардонов, как понять эту запись? Вы не могли бы пожалуйста расшифровать её:
    (items1, items2) => (
      items1.filter((item) => !items2.includes(item))
    );
  • Функциональный подход решение задачи с массивом?

    @Alex_87 Автор вопроса
    Stalker_RED, Объясняю! берём первый элемент первого массива и проходимся им по всем элементам второго массива. Далее... Берём второй элемент первого массива и проходимся им по всем элементам второго массива
  • Функция нахождения совпадения в строке?

    @Alex_87 Автор вопроса
    // Поиск максимального числа
    const numbers = [10, 20, 52, 105, 56, 89, 96];
    
    const max = numbers.reduce(
      (acc, number) => number > acc ? number : acc,
      numbers[0],
    );
    
    console.log(max); // => 105

    Не понятно, что за запятая и numbers[0], ... что там происходит?
  • Функция нахождения совпадения в строке?

    @Alex_87 Автор вопроса
    Я смог решить без использование map, filter, reduce:
    function getFreeDomainsCount(arr){
      let result = [];
      let count = 0;
    
    
       for(let i = 0; i < freeEmailDomains.length; i += 1){ 
         for (let j = 0; j < arr.length; j += 1){
             if(freeEmailDomains[i] == arr[j].split('@')[1]){
               count += 1;
             }  
         }
         result += count;
         count = 0;
       }
       return result;
    }
    
    
    console.log(getFreeDomainsCount(emails));

    Но хочу научиться решать нормальным способом(как это сделали вы). Прокомментируйте пожалуйста ваши строки!