前端面试手写代码——查找文章中出现频率最高的单词

//   方法一:
const fn = (str) => {
  if (!str) return;
  // 去掉空格和全部单词变小写,如果区分大小则不用 toLowerCase
  const article = str.trim().toLowerCase();
  // 用正则的 match 获取所有的单词
  const list = article.match(/[a-zA-Z]+/g);
  const map = {};
  // 记录每个单词和对应的出现次数
  list.forEach((item) => {
    let count = 1;
    if (Object.prototype.hasOwnProperty.call(map, item)) {
      count = map[item] + 1;
    }
    map[item] = count;
  });
  let maxItem = { maxWord: "", maxNum: 0 };
  // 查找出现次数最多的单词
  for (let item in map) {
    if (Object.prototype.hasOwnProperty.call(map, item)) {
      if (map[item] > maxItem?.maxNum) {
        maxItem = { maxWord: item, maxNum: map[item] };
      }
    }
  }
  return maxItem;
};

//   【优化】方法一
const _fn = (str) => {
  if (!str) return;
  // 去掉空格和全部单词变小写,如果区分大小则不用 toLowerCase
  const article = str.trim().toLowerCase();
  // 用正则的 match 获取所有的单词
  const list = article.match(/[a-zA-Z]+/g);
  const map = {};
  let maxItem = { maxWord: "", maxNum: 0 };
  // 记录每个单词和对应的出现次数
  list.forEach((item) => {
    let count = 1;
    if (Object.prototype.hasOwnProperty.call(map, item)) {
      count = map[item] + 1;
    }
    map[item] = count;
    if (count > maxItem?.maxNum) {
      maxItem = { maxWord: item, maxNum: count };
    }
  });
  return maxItem;
};

//   方法二:
function findMostWord(article) {
  // 合法性判断
  if (!article) return;
  // 参数处理
  article = article.trim().toLowerCase();
  let wordList = article.match(/[a-z]+/g),
    visited = [],
    maxNum = 0,
    maxWord = "";
  article = " " + wordList.join("  ") + " ";
  // 遍历判断单词出现次数
  wordList.forEach(function (item) {
    if (visited.indexOf(item) < 0) {
      // 加入 visited
      visited.push(item);
      let word = new RegExp(" " + item + " ", "g"),
        num = article.match(word).length;
      if (num > maxNum) {
        maxNum = num;
        maxWord = item;
      }
    }
  });
  return { maxWord, maxNum };
}

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript)