我想比较两个变量:野兽和菜肴。
如果野兽和菜肴的第一个和最后一个字母相同,则该函数应返回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?
答案 0 :(得分:1)
您不能给charAt
赋予否定索引;当您这样做时,您总是会得到""
的回复。
要获取字符串的最后一个字符,请使用str.charAt(str.length - 1)
或str.slice(-1)
(因为slice
接受负索引,并且由于charAt
和slice
都返回字符串,因为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)
您可能将charAt
与slice
混淆,后者可以使用负索引-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。