NodeJS 实现.split方法

qncylg1j  于 2022-12-22  发布在  Node.js
关注(0)|答案(1)|浏览(174)

我需要用我自己的方式实现. split方法,而不使用预建函数,该方法应该接收一个用点分成2个句子的字符串,并通过分隔符将它们分开,例如,有这样一个字符串:'单词伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔伍尔'.'结果应为:["字呜啦呜啦呜啦","呜啦呜啦呜啦呜啦呜啦呜啦呜啦"]
我自己尝试过实现,遇到的第一个问题是字符串中的单词被逐字符添加到新的数组中,第二个问题是输出仍然是字符串,尽管我之前声明了一个数组。

function split(str, splitter){
    let arrSent = []
    for (let i = 0; i < str.length; i++){
        if (str[i] != splitter){
            arrSent += str[i]
        }
    }
    return arrSent
}
console.log(split('word wooord wooooooooord wooooooord. wooooooooord woooooord woooord wooooooooord', '. '))
zzlelutf

zzlelutf1#

由于分隔符可以包含多个字符,因此您需要系统预先收集***样本***字符(与分隔符长度相同),然后与分隔符进行比较:

const split = (str, delimiter) => {

  // If delimiter is empty string just return an array of characters
  if (delimiter === "") return [...str];

  const len = delimiter.length;
  const iter = str.length - len + 1; // max needed iterations
  const arr = [""]; // Prefill it with empty string
  let idx = 0; // arr insertion pointer
  
  for (let i = 0; i < iter; i++) {
  
    // Collect len chars from str as a sample
    // to compare with the delimiter:
    let sample = "";
    for (let x = i; x < i + len; x++) {
      sample += str[x];
    }
    
    const isSplit = sample === delimiter;
    const isEnded = i === iter - 1;

    if (isSplit) {
      i += len - 1;  // Consume splitted characters
      idx += 1;      // Increment arr pointer
      arr[idx] = ""; // Prepare the new array key as empty string
    } else {
      // If loop ended append the entire sample.
      // Otherwise, append a single character:
      arr[idx] += isEnded ? sample : str[i];
    }
  }
  
  return arr
}

console.log(split("word. etc", ". "));
console.log(split("word. etc. ", ". "));
console.log(split(". word yep. . etc. ", ". "));
console.log(split("word", ". "));
console.log(split("word", "word"));
console.log(split("word", ""));
console.log(split("", ""));

上面,idx(从0开始)被用作输出的arr插入指针。如果sampledelimiter匹配,idx将递增。此外,如果匹配,我们需要跳过i += len迭代,以便不在输出数组中包含分隔符。
为了进行测试,创建许多示例,并在return arr;之前使用console.log(JSON.stringify(arr) === JSON.stringify(str.split(delimiter)));-它应该为所有提交的测试返回true

相关问题