JavaScript 'get middle letter' 代码 War 挑战的三元运算符函数

Ternary operator function for JavaScript 'get middle letter' Code War challenge

代码挑战:编写一个函数,获取一串偶数或奇数字母的中间字母,作为三元运算符。

我的函数适用于奇数。但它不适用于偶数 - 它似乎在跳过字母。

例如。

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个字符。您可以通过将字符串的长度除以 2 来做到这一点。

从零开始的数组中的索引将是 s。如果从索引中减去 1,它将是 e。添加 +1 时,您会得到 t

在您的代码中,您连接索引 -1 和索引 +1 导致 et

您应该省略 str[str.length/2 + 1] 中的 + 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"))

我知道需要使用三元,但您也可以在没有任何此类条件的情况下简单地执行此操作。

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"