Тернарная операторная функция для JavaScript «получи среднюю букву» вызов Code War - PullRequest
0 голосов
/ 23 ноября 2018

Задача кода: напишите функцию, которая получает среднюю букву (буквы) строки четных или нечетных букв в качестве троичного оператора.

Моя функция работает для нечетных чисел.Но это не работает для четных чисел - кажется, что пропускаются буквы.

например.

getMiddle("testing") // the output is "t", this is correct.  
getMiddle("test") // the output is "et", it should be "es". 

мой код:

    function getMiddle(str) {
     return str.length % 2 === 0 ? str[str.length/2 - 1] + str[str.length/2 + 1] : str[Math.floor(str.length/2)];
    }

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я понимаю, что использование троичного необходимо, но вы можете просто сделать это без каких-либо таких условий.

var getmid = (s, i=s.length/2) => s.slice(Math.ceil(i-1), Math.ceil(i+1)-(s.length & 1));
console.log(getmid("test"));  // <- "es"
console.log(getmid("testo")); // <- "s"
0 голосов
/ 23 ноября 2018

Если длина четна, вы хотите, чтобы 2 символа были посередине.Вы делаете это, беря длину строки и деля ее на 2.

Этот индекс в массиве, основанном на нуле, будет s. Если вы вычтите 1 из индекса, это будет e.Когда вы добавляете +1, вы получаете t

. В своем коде вы объединяете индекс -1 и индекс +1, ведущий к et

. Вы должны опустить + 1в str[str.length/2 + 1] как:

function getMiddle(str) {
    return str.length % 2 === 0 ? str[str.length / 2 - 1] + str[str.length / 2] : str[Math.floor(str.length / 2)];
}

function getMiddle(str) {
  return str.length % 2 === 0 ? str[str.length / 2 - 1] + str[str.length / 2] : str[Math.floor(str.length / 2)];
}

console.log(getMiddle("testing"));
console.log(getMiddle("test"));
console.log(getMiddle("testtest"))
...