【问题标题】:Ternary operator function for JavaScript 'get middle letter' Code War challengeJavaScript“获取中间字母”代码战挑战的三元运算符函数
【发布时间】:2018-11-23 14:58:38
【问题描述】:

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

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

例如。

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)];
    }

【问题讨论】:

  • 当它是偶数时,你会在一半长度的前一个和一个后一个位置得到字母;你跳过了正好一半长度的字母。
  • 答案很简单,我想你多试试就知道了

标签: javascript algorithm ternary


【解决方案1】:

当长度是偶数时,你想要中间的 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"))

【讨论】:

    【解决方案2】:

    我知道需要使用三进制,但您也可以不使用任何此类条件就这样做。

    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"

    【讨论】:

      最近更新 更多