用于JavaScript“获取中间字母” Code War挑战的三元运算符函数

时间:2018-11-23 14:58:39

标签: javascript algorithm ternary

代码挑战:编写一个函数,以三进制运算符的形式获取由偶数或奇数字母组成的字符串的中间字母。

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

例如

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 :(得分: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"))

答案 1 :(得分:0)

我知道必须使用三元,但是您也可以简单地这样做,而无需任何此类条件。

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"