Функция getMiddle(str)

268
04 августа 2018, 13:00

Функция возвращает если число нечетное, средний символ строки, а если четное, то средние два символа. А если в строке один символ, то возвращает её
GetMiddle():

function getMiddle(str) {
    if (str.length > 0 && str.length < 1000) {
        var evenOrOdd = function(number) {
            return (+number % 2) == 0?true:false;
        }
        var $evenOrOdd = evenOrOdd(str)
        if (str.length == 1) {
            return str
        } else
        if ($evenOrOdd) {
            return str[str.length / 2] + str[str.length / 2 -1]
        } else {
            return str[(str.length - 1)  / 2]
        }
    }
}

Тесты с нечетными она проходит, а вот с четными возвращает undefined

Answer 1

Есть несколько моментов:

function getMiddle(str) {                         // Будем брать .length, а если дадут не строку или объект с этим свойством? 
    if (str.length > 0 && str.length < 1000) {    // Лимит установили, но в случае выхода из лимита не обработали 
        var evenOrOdd = function(number) {        // Отдельная функция на раз вызова и каждый вызов её заново определять? 
            return (+number % 2) == 0?true:false; // Контекст подразумевает возвращения булева значения, зачем условия; возвращайте сам результат сравнения 
        } 
        var $evenOrOdd = evenOrOdd(str.length)    // Мы же длину хотим проверять, а не значение строки (ошибка тут) 
        if (str.length == 1) {                    // В начале стоит делать это 
            return str 
        } else                                    // Это не ошибка, но не ставить скобки в таком месте - тимлид на ревью будет очень недоволен 
        if ($evenOrOdd) { 
            return str[str.length / 2] + str[str.length / 2 -1] // Стоит поменять местами выборку символов (из-за нумерации символов с нуля, str.length / 2 укажет на второй нужный символ, а str.length / 2 -1 как раз на предыдущий) 
        } else { 
            return str[(str.length - 1)  / 2] 
        } 
    } 
} 
 
console.info(getMiddle("Some")); 
console.info(getMiddle("Thing"));

Answer 2
var $evenOrOdd = evenOrOdd(str.length);
READ ALSO
Babel не компилирует мой js код

Babel не компилирует мой js код

В старых версиях IE не работает js кодПытаюсь работать через babel

238
Как реализовать анимацию по клику SVG фигур в EDGE и IE?

Как реализовать анимацию по клику SVG фигур в EDGE и IE?

Чтобы не возникало лишних вопросов, и не было предложений, которые не решают вопросаИзменил примеры на оригинал

234
Активное поле после отправки данных на сервер

Активное поле после отправки данных на сервер

есть поле <td class="left"><input type="text" class="packed" placeholder="<?php echo $text_provider_enter?>"></td> в него вносятся данные с помощью сканера и они оправляются...

246
Как сделать проверку if/else ширину блока в Jquery?

Как сделать проверку if/else ширину блока в Jquery?

Нужно повесить toggle событие на элемент, который будет изменять ширину блокаТо больше будет его делать, то меньше

229