2025-08-25 模拟面试(八)
- 实现一个函数,将驼峰命名法字符串转换为连字符命名法
题目: 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"));
console.log(strFormat("getElementById"));
- 解析 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");
var url = new URL("https://example.com?name=john&age=30");
var params = new URLSearchParams(url.search);
params.get("name");
params.has("age");
- 千分位分隔符
题目: 实现一个函数,为数字添加千分位分隔符。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));