面试编写
编写一个函数,将数组 [1,2,3,4,5,6,7,8,9,0] 转换为电话号码格式 (123) 456-7890。这个任务主要涉及数组到字符串的转换以及格式化输出。
实现方法
想到字符串拼接
使用字符串拼接的方法,通过循环遍历数组并手动添加所需的格式字符。这种方法直观且容易理解。
示例代码:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
function getPhoneNum(arr) {
let format = "(###) ###-####";
for (let i = 0; i < arr.length; ++i) {
format = format.replace("#", arr[i]);
}
return format;
}
console.log(getPhoneNum(arr)); // 输出:(123) 456-7890
面试官:能不用for循环,减少时间复杂度吗?
那用正则表达式
那使用正则表达式,一句代码解决。使用正则表达式配合字符串替换方法来实现格式化。这种方法适用于更复杂的模式匹配,代码更加简洁。
示例代码:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
function getPhoneNum(arr) {
let str = arr.join(''); // 将数组转换为字符串
return `(${str.slice(0, 3)}) ${str.slice(3, 6)}-${str.slice(6)}`;
}
console.log(getPhoneNum(arr)); // 输出:(123) 456-7890
面试官:这个方法很好,还有其他优化方法吗?能用到es6区分es5相关的功能吗?
那不是es6模板字符串
利用ES6的模板字符串功能,提高代码的可读性和简洁性。
- 字符串拼接:可以在字符串中直接嵌入变量和表达式,使用 ${} 来包裹变量或表达式。
- 多行字符串:轻松地创建多行字符串,而不需要使用换行符 \n 或字符串连接操作符 +。
- 字符串插值:可以在字符串中直接使用变量和表达式的值,而不需要进行显式的字符串拼接。
示例代码:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
function getPhoneNum(arr) {
return `(${arr[0]}${arr[1]}${arr[2]}) ${arr[3]}${arr[4]}${arr[5]}-${arr[6]}${arr[7]}${arr[8]}${arr[9]}`;
}
console.log(getPhoneNum(arr)); // 输出:(123) 456-7890
面试官:好呀,咱们下一题 ...
补充es6模版字符串使用:
// 基本的字符串拼接
let name = "Alice";
console.log(`Hello, ${name}!`); // 输出: Hello, Alice!
// 嵌入表达式
let x = 10;
let y = 20;
console.log(`The sum of ${x} and ${y} is ${x + y}.`); // 输出: The sum of 10 and 20 is 30.
// 多行字符串
let poem = `Roses are red,
Violets are blue,
Sugar is sweet,
And so are you.`;
console.log(poem);
在面试中考察候选人的编程能力时,快速编码、代码风格与可读性、代码优化以及对现代JavaScript特性(如ES6模板字符串)的理解都是重要的评估点。祝愿你能有个offer到手~