Лучший способ использования простого объявления функции или выражения - объявление функции стрелки не работает

Я создал простую функцию, которая проверяет, можно ли переставить 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

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