我不知道JavaScript算法问题!(代码战争问题)



我有一个关于JavaScript算法的简单问题

https://www.codewars.com/kata/56747fd5cb988479af000028/train/javascript

我正在解决这个问题。这个问题的解释是从奇数字符的中间提取两个字母

我好奇的是

function getMiddle(s) {
//Code goes here!
let answer = "";
if (s.length % 2 !== 0) {
answer += s[Math.floor(s.length / 2)];
} } else {
answer += s.slice(
(Math.floor(s.length / 2 - 1), Math.floor(s.length / 2 + 1))
);
}
return answer;
}
console.log(getMiddle("test"));
console.log(
"test".slice(
Math.floor("test".length / 2 - 1),
Math.floor("test".length / 2 + 1)
)
);

getMiddle函数的返回值最终是否与console.log('test'.slice~'(不同?

不同的是,一个是函数的返回值,另一个只是直接从控制台获取,但我不知道为什么它是相同的代码,但值不同

请帮我

问题是,在函数中,您将一对索引封装在括号中:

answer += s.slice(
(Math.floor(s.length / 2 - 1), Math.floor(s.length / 2 + 1))
//  ^                                                          ^
);

这些括号将触发对它们之间的内容的评估,这意味着逗号将被解释为逗号运算符。该操作的结果是作为参数传递给s.slice的单个数字。因此,实际上您只使用一个参数而不是两个参数来调用slice,由于使用了逗号运算符,它是slice使用的第二个索引。相当于s.slice(3)

在第二个console.log中,您没有这些额外的括号,因此它按预期工作。

注意:我认为else之前额外的右大括号是打字错误

最新更新