JavaScript Оператор return

180
04 марта 2019, 21:50

Задача: вернуть средний символ слова. Если длина слова нечетна, верните средний символ. Если длина слова четная, верните средние 2 символа.

function getMiddle(s){
    var even, odd, centerLetter,arrLetter;
    (s.length%2==0) ?  (centerLetter = (Math.round(s.length/2))) : (centerLetter = (Math.round(s.length/2))-1) ;
    arrLetter = s.split("");
    (s.length%2==0) ? (console.log( arrLetter[centerLetter-1] + arrLetter[centerLetter] )) :(console.log(arrLetter[centerLetter]));
}
getMiddle("test"); //es
getMiddle("testing");//t
getMiddle("middle");//dd
getMiddle("A");//A

Вопрос: Я написал код который вывод в консоль ответ, как мне переписать код чтобы он возвращял функции через return?

Answer 1

function getMiddle(s) { 
  return !(s.length % 2) ? s.substr(s.length / 2 - 1, 2) : s[Math.round(s.length / 2) - 1]; 
} 
 
console.log(getMiddle('test')) 
console.log(getMiddle('testing')) 
console.log(getMiddle('middle')) 
console.log(getMiddle('A'))

Обновлено
Более короткий способ (спасибо @Regent, см. комментарии к посту)

function getMiddle(s) { 
  return s.substr((s.length - 1) / 2, 2 - s.length % 2); 
} 
 
console.log(getMiddle('test')) 
console.log(getMiddle('testing')) 
console.log(getMiddle('middle')) 
console.log(getMiddle('A'))

Answer 2

Один из вариантов: заменить тернарные оператор на if и в этом случае достаточно заменить console.log на return

function getMiddle(s) { 
  var even, odd, centerLetter, arrLetter; 
  if (s.length % 2 == 0) { 
    centerLetter = (Math.round(s.length / 2)); 
  } else { 
    centerLetter = (Math.round(s.length / 2)) - 1; 
  } 
  arrLetter = s.split(""); 
  if (s.length % 2 == 0) { 
    return arrLetter[centerLetter - 1] + arrLetter[centerLetter]; 
  } else { 
    return arrLetter[centerLetter]; 
  } 
} 
console.log(getMiddle("test")); //es 
console.log(getMiddle("testing")); //t 
console.log(getMiddle("middle")); //dd 
console.log(getMiddle("A")); //A

Либо использовать непосредственные результаты тернарного оператора:

function getMiddle(s) { 
  var even, odd, centerLetter, arrLetter; 
  centerLetter = (s.length % 2 == 0) ? Math.round(s.length / 2) : ((Math.round(s.length / 2)) - 1); 
  return (s.length % 2 == 0) ? (s[centerLetter - 1] + s[centerLetter]) : (s[centerLetter]); 
} 
console.log(getMiddle("test")); //es 
console.log(getMiddle("testing")); //t 
console.log(getMiddle("middle")); //dd 
console.log(getMiddle("A")); //A

Answer 3

В конце функций в return = centerLetter;

  • Или в место присвоения centerLetter поставь return
READ ALSO
Как Ajax`ом забрать JS c Web-морды IP камеры?

Как Ajax`ом забрать JS c Web-морды IP камеры?

У нас в компании есть внутренний сайт,на котором есть доступ к IP камерам, суть такова - нажимаем на иконку камеры и выводится изображение,...

168
:root Angular 5

:root Angular 5

Мне нужно динамически применить некоторые CSS custom properties в :root{} Как я могу это сделать? Заранее,спасибо

178