Задача JavaScript

Итак, у меня есть небольшая функция JavaScript, которую мне нужно понять, как кодировать, как вызов. По сути:

function me() { // imp this function code }

var isSame1 = me("123")("321") === "123 321";
var isSame2 = me("321")("123") === "321 123";

Желаемый результат - мы хотим, чтобы оба параметра isSame были истинными. Итак, из того, что я понимаю до сих пор, функция me () должна сначала возвращать функцию (какая-то форма рекурсии, которую я себе представляю), а затем каким-то образом строку, чтобы объединить результирующие строки (в реальном примере есть некоторые манипуляции со строками во время функция me (), но мне не нужна помощь с этой частью).

Я чувствую, что есть функция JavaScript, которую я здесь четко не вижу. Я знаю, что могу вернуть функцию как объект и вызвать ее, что является действительно изящной функцией, но меня смущает обработка / передача строки другой функции с последующим ее возвратом в конце.

Может ли кто-нибудь указать мне в правильном направлении, на что обращать внимание. Не хочу, чтобы на него ответили полностью за меня, просто хочу, чтобы мне дали правильную область исследования.

Gerneio

stackoverflow.com/questions/111102/…
Alexander Nied 02.04.2018 21:12

Да, вы правы, me возвращает функцию, которой передается строковый аргумент. Сама эта функция должна возвращать строку, представляющую строку после ===.

George 02.04.2018 21:12

Это в основном про карри

VLAZ 02.04.2018 21:12

@AlexanderNied Спасибо, это именно то, что мне нужно! В остальном Currying тоже кажется применимым, но, насколько я понимаю, это слишком новая функция.

Gerneio 02.04.2018 21:20

Каррирование @Gerneio - это не «особенность», это техника. Это тоже не ново - оно буквально предшествует JS. Наконец, ссылка Alexacnder Neid полезна лишь частично, поскольку она как бы связана с тем, как реализовано каррирование.

VLAZ 02.04.2018 21:23

@vlaz, может быть, и так, но он получил именно то, что мне нужно.

Gerneio 02.04.2018 21:25

@Gerneio - без проблем, рад подсказать. Но, заметьте, утверждение, что каррирование - это «слишком новая функция», не является точным - каррирование - это не функция как таковая, а шаблон проектирования в функциональном программировании. Связанный блог в ответе Патрика Роберта просто показывает, как выполнять каррирование в «вкусе» JavaScript ES6.

Alexander Nied 02.04.2018 21:25

@AlexanderNied круто, спасибо за информацию, видел ES6 и протестировал этот тип реализации в Google Script, но он не работал, поэтому сделал предположение слишком быстро.

Gerneio 02.04.2018 21:28

Кроме того, @vlaz верен - я поделился тем постом, в котором он поделился версией того, что вы искали, а не потому, что ваше решение специально связано с закрытием. Вероятно, лучшей ссылкой для обмена было бы stackoverflow.com/questions/36314/what-is-currying. Извините, что я объединил эти идеи для вас.

Alexander Nied 02.04.2018 21:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Каррирование в JavaScript довольно просто. Просто верните функцию с ограниченной областью действия из me().

Например, чтобы реализовать каррированное добавление с помощью замыкания, вы можете написать такую ​​функцию:

function add (a) {
  return b => a + b
}

console.info(add(3)(4))

Или см. Ниже решение проблемы.

Спойлер (полная реализация):

 function me (a) {
   return b => `${a} ${b}`
 }
 
 console.info(me(123)(321))
 console.info(me(321)(123))

Надеюсь, это поможет вам найти то, что вы ищете.

Каррирование кажется новой функцией языка, закрытие более применимо в целом, хотя, спасибо!

Gerneio 02.04.2018 21:19

Каррирование @Gerneio - не новая языковая функция. Вы можете карри использовать стрелочные функции или обычные функции, просто с синтаксической точки зрения проще использовать стрелочные функции.

Patrick Roberts 02.04.2018 21:20

Нет, каррирование передает параметры с отдельными вызовами, например (...)(...), а не (..., ...). Замыкания - это области вложенных функций в результате того, что функция возвращает другую функцию, именно так вы реализуете каррированную функцию.

Patrick Roberts 02.04.2018 21:23

@Gerneio, это совершенно разные вещи. Каррирование изменяет функцию для приема аргументов меньше, чем она уже делает, но вместо «нормального» результата дает вам новую функцию, которая примет остаток. Это также называется частичным приложением, но эти два понятия все еще не являются синонимами.

VLAZ 02.04.2018 21:26

Для каррирования и частичного применения: 2ality.com/2011/09/currying-vs-part-eval.html

Alexander Nied 02.04.2018 21:30

@AlexanderNied, спасибо, я действительно пытался гуглить и ссылаться, но не нашел.

VLAZ 02.04.2018 21:33

Каррирование просто возвращает функцию, которая затем вызывается с последующим набором аргументов. Это не уменьшает количество аргументов, а просто дает возможность выполнить код перед следующим вызовом функции или выполнить его немедленно. Например, если вы вызвали me('foo'), он вернет только функцию, которая будет выполнена позже. Вы бы выполнили его сразу после возврата, если бы вы сделали me('foo')('bar') (второй набор круглых скобок выполняет возвращаемую функцию).

BotNet 03.04.2018 16:52

Другие вопросы по теме