如何比较两个返回false或true的变量的第一个字母和最后一个字母

时间:2019-09-05 15:37:41

标签: javascript string

我想比较两个变量:野兽和菜肴。

如果野兽和菜肴的第一个和最后一个字母相同,则该函数应返回true。

我有90%的代码。唯一的问题是当野兽或菜肴是两个字串时,例如“大雪人”

我的代码:

function feast(beast, dish) {
  var beastFirstLetter = beast.charAt(0)
  var beastLastLetter = beast.charAt(-1)
  var dishFirstLetter = dish.charAt(0)
  var dishLastLetter = dish.charAt(-1)

  if (beastFirstLetter === dishFirstLetter && beastLastLetter === dishLastLetter) {
  return true
  } else {
  return false
  }
}

为什么feast(“棕熊”,“熊爪”)返回true而不是false?

3 个答案:

答案 0 :(得分:1)

您不能给charAt赋予否定索引;当您这样做时,您总是会得到""的回复。

要获取字符串的最后一个字符,请使用str.charAt(str.length - 1)str.slice(-1)(因为slice接受负索引,并且由于charAtslice都返回字符串,因为JavaScript没有字符类型。

无论何时何地,

if (/*..expression with relational operators */) {
    return true;
} else {
    return false;
}

只写起来就简单多了:

return /*..expression with relational operators */;

因为关系运算符(=====!=!==<<=>>=)都返回布尔值。

同时进行两项编辑:

function feast(beast, dish) {
  var beastFirstLetter = beast.charAt(0)
  var beastLastLetter = beast.charAt(beast.length - 1)
  var dishFirstLetter = dish.charAt(0)
  var dishLastLetter = dish.charAt(dish.length - 1)

  return beastFirstLetter === dishFirstLetter && beastLastLetter === dishLastLetter;
}
console.log(feast("brown bear", "bear claw"));

答案 1 :(得分:1)

  

为什么feast(“棕熊”,“熊爪”)返回true而不是false?

因为该算法无法正确捕获最后一个字母。 String.charAt(-1)不返回最后一个字母,而是一个空字符串。只需更改: var beastLastLetter = beast.charAt(-1)var dishLastLetter = dish.charAt(-1)

收件人:

var beastLastLetter = beast.charAt(beast.length - 1)var dishLastLetter = dish.charAt(dish.length - 1)

答案 2 :(得分:1)

您可能将charAtslice混淆,后者可以使用负索引-1来删除字符串右边的字符。

function feast(beast, dish) {
  var beastFirstLetter = beast.charAt(0)
  var beastLastLetter = beast.slice(-1)
  var dishFirstLetter = dish.charAt(0)
  var dishLastLetter = dish.slice(-1)

  if (beastFirstLetter === dishFirstLetter && beastLastLetter === dishLastLetter) {
    return true
  } else {
    return false
  }
}

console.log('feast("brown bear", "bear claw"): it shoud be false =>', feast("brown bear", "bear claw"));

实际上,slice(0, 1)也可以用于获取字符串的第一个字符。有关更多信息,请参见MDN