请问正则可以做到这样吗

我需要:
一个多行文本框,里面每一行写一个ip。

点一个按钮,做到:
去掉重复5次以下的行。重复5次以上的只保留一行(重复的去掉),并且排序。

如果做不到统计次数,那就退一步:
去掉没有重复的行。重复的都只保留一行,并且排序。

谢谢老师。

阅读 1.1k
1 个回答
const THRESHOLD = 3;

let source = `
  127.0.0.1
  127.0.0.2
  127.0.0.2
  127.0.0.3
  127.0.0.1
  127.0.0.1
  127.0.0.1
  127.0.0.3
  127.0.0.1
  127.0.0.4
  127.0.0.4
  127.0.0.4
`;

let results = source
  .split('\n')          // 按换行符分割
  .map(e => e.trim())   // 过滤每行首尾空白符
  .filter(e => !!e)     // 过滤空白行
  .reduce(function () { // 只保留次数大于等于 `THRESHOLD` 的行
    const temp = {};
    return function (acc, cur, idx, src) {
      if (temp[cur]) {
        temp[cur]++;
      } else {
        temp[cur] = 1;
      }

      if (idx === src.length - 1) {
        return Object.keys(temp).filter((k) => temp[k] >= THRESHOLD).sort(); 
      }
    }
  }(), 0);

console.log(results);

image.png

推荐问题