2025-08-25 模拟面试(八)

  1. 实现一个函数,将驼峰命名法字符串转换为连字符命名法 题目: camelCaseToKebabCase('getElementById') 应该返回 'get-element-by-id'。 考察点: 字符串遍历、正则表达式。正则表达式是更优雅的解决方案。 进阶: 如何处理首字母大写的情况?(例如 HelloWorld -> hello-world)
// 普通循环
function strFormat(str) {
  if (!str) {
    return "";
  }
  var result = "";
  for (let index = 0; index < str.length; index++) {
    if (/[A-Z]/.test(str[index])) {
      if (index === 0) {
        result = str[index].toLowerCase();
      } else {
        result += "-" + str[index].toLowerCase();
      }
    } else {
      result += str[index];
    }
  }
  return result;
}

// 正则循环,特殊处理一下第一个字母的情况
function strFormat(str) {
  str = str.replace(/([A-Z])/g, "-$1").toLowerCase();
  if (str.charAt("-") === "-") {
    str = str.slice(1);
  }
  return str;
}

console.log(strFormat("helloWorld")); // hello-world
console.log(strFormat("getElementById")); // get-element-by-id
  1. 解析 URL 参数 题目: 实现一个函数 getUrlParams(url),将 URL 的查询参数解析为一个对象。 示例: getUrlParams('https://example.com?name=john&age=30') 返回 {name: 'john', age: '30'}。 考察点: 字符串分割 (split)、URLSearchParams API (如果能说出这个原生 API 并手动实现,是加分项)、边界处理(没有参数、重复参数、数组参数?a=1&a=2)。
function getUrlParams(url) {
  if (!url.includes("?")) {
    return null;
  }
  var list = url.split("?");

  var params = list[1];
  var paramsList = params.split("&");
  var result = {};
  paramsList.forEach((item) => {
    var temp = item.split("=");
    result[temp[0]] = temp[1];
  });
  return result;
}

getUrlParams("https://example.com?name=john&age=30"); // {name: 'john', age: '30'}

// 官方获取url参数的api
var url = new URL("https://example.com?name=john&age=30");
var params = new URLSearchParams(url.search);
params.get("name"); // john
params.has("age"); // true
  1. 千分位分隔符 题目: 实现一个函数,为数字添加千分位分隔符。formatNumber(1234567.89) -> '1,234,567.89'。 考察点: 对数字和字符串的处理、正则表达式的使用。也可以考察 Intl.NumberFormat API 的了解。
function formatNumber(number) {
  var str = number.toString().split("").reverse().join("");
  var result = "";
  while (str.length > 3) {
    var temp = str.match(/\d{3}/);
    if (temp) {
      result += temp[0] + ",";
      str = str.slice(3);
    }
  }
  result += str;
  return result.split("").reverse().join("");
}
console.log(formatNumber(123456789)); // 123,456,789

results matching ""

    No results matching ""