【问题标题】:Stripping markers (provided in array) from text does not pass tests in Codewars从文本中剥离标记(以数组形式提供)未通过 Codewars 中的测试
【发布时间】:2017-09-07 21:57:13
【问题描述】:

我正在尝试解决 Codewars 上的 Strip Comments 挑战。问题描述是——

完成该解决方案,以去除传入的任何一组注释标记之后的所有文本。还应去除行尾的任何空格。

输入和预期输出的屏幕截图 -

我解决问题的方法是——

  1. 将输入字符串拆分为一个数组。创建一个新数组来保存结果。
  2. 对于第一个数组(输入)中的每个字符,如果该字符不是标记,则将其压入结果数组。
  3. 如果字符是标记,则忽略所有后续字符,直到遇到换行符\n。此时,继续推入结果数组。
  4. 重复直到输入数组结束。
  5. 加入结果数组,修剪字符串并返回。

我的代码 -

function solution(input, markers) {
  let markerFound = false;
  let stripped = [];
  let letters = input.split('');
  for (let i = 0; i < letters.length; i++) {
    if (markers.includes(letters[i])) {
      markerFound = true;
    }

    if (markerFound && letters[i] === "\n") {
      markerFound = false;
    }

    if (!markerFound) {
      stripped.push(letters[i]);
    }

  }
  return stripped.join("").trim();
}

console.log(solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"]));

我不确定测试失败的原因。预期和返回的输出在我看来是一样的 -

【问题讨论】:

    标签: javascript arrays text


    【解决方案1】:

    很简单:梨后面有一个空格。

    所有行尾的空格也应该去掉。

    我猜你在推到剥离的数组时需要再次修剪

    stripped.push(letters[i].trim());
    

    【讨论】:

    • 这也消除了单词之间的空格,Returned 'apples,pearsgrapesbananas'。但是感谢您的想法,我想我知道必须做什么。
    • 这就是有效的方法 - return stripped.join('').replace(/\s\n/,'\n').trim();
    【解决方案2】:
    function solution(input, markers) {
      let isFounded = false;
      let letters = input.split('');
      let stripped = letters.reduce((acc , letter) => {
        if(markers.includes(letter)) isFounded = true;
        if(isFounded && letter === '\n') isFounded = false;
        if(!isFounded) acc.push(letter)
          return acc;
      }, [])
      
      return stripped.join('').replace(/\s\n/ , '\n').trim();
    };
    

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2018-02-15
      • 2020-08-22
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2018-04-03
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多