【问题标题】:i don't know javascript algorism problem!(codewars problem)我不知道 javascript 算法问题!(codewars 问题)
【发布时间】:2022-10-14 16:43:27
【问题描述】:

我有一个关于 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~')有区别吗?

不同的是,一个是函数的返回值,一个是直接从控制台取的,但是不知道为什么是一样的代码,但是值不同crying

请帮我

【问题讨论】:

  • 你有一些不匹配的花括号。请确保代码是minimal reproducible example
  • 正确缩进代码是一个好习惯。更容易看到它在做什么(也为你),并调试它。

标签: javascript


【解决方案1】:

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

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

这些括号将触发对它们之间的内容的评估,这意味着逗号随后被解释为comma-operator。该操作的结果是作为参数传递给s.slice 的单个数字。所以你实际上是用一个参数而不是两个参数调用slice

【讨论】:

    【解决方案2】:

    您首先需要拆分字符串以创建一个数组,然后您调用的 length 才可以有意义地使用,而且您还有一个放错位置的右括号。

    function getMiddle(val) {
    //Code goes here!
    const s = val.split("")
    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) + 2);
    }
    return answer.replace(",", "");
    }
    
    console.log(getMiddle('test'))

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多