Лучший способ использования простого объявления функции или выражения - объявление функции стрелки не работает
Я создал простую функцию, которая проверяет, можно ли переставить 2 строки, чтобы они были идентичными - например:
// tests
canRearrange('teset','testy'); // false
canRearrange('teste','teset'); // true
canRearrange('tes','set'); // true
Для краткости я пытаюсь найти лучший, самый аккуратный и краткий способ написания функции в разделе else. Я пробовал следующее:
// 1. requires var sameChars being defined first
var sameChars = ((c) => str1.includes(c) && str2.includes(c));
return str1.every(sameChars) && str2.every(sameChars);
// 2. works but is untidy
return str1.every(((c) => str1.includes(c) && str2.includes(c))) && str2.every(((c) => str1.includes(c) && str2.includes(c)));
// 3. fails presumably due to syntax error
return str1.every(sameChars) && str2.every(sameChars);
function sameChars((c) => str1.includes(c) && str2.includes(c));
По сути, я пытаюсь заставить № 3 (выше) работать, или посмотреть, есть ли лучший способ написать это. Предположительно, это все еще будет работать, если функция "sameChars" написана ниже основного кода - мой основной код (он работает) выглядит следующим образом:
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
} else {
return str1.every(sameChars) && str2.every(sameChars);
function sameChars(c){
return str1.includes(c) && str2.includes(c);
}
}
}
У кого-нибудь есть идеи, как это можно улучшить? Спасибо за любую помощь здесь.
1 ответ
// 3. fails presumably due to syntax error return str1.every(sameChars) && str2.every(sameChars); function sameChars((c) => str1.includes(c) && str2.includes(c));
Да, это синтаксическая ошибка. Как было отмечено в комментариях, вы смешиваете формат объявления функции и функции стрелки. Функция Arrow - это сокращенный синтаксис для выражения функции. Объявления функций выводятся 1, а выражения функций - нет, поэтому "основной код" работает с объявлением функции.
1 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function