我有一个关于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
之前额外的右大括号是打字错误