面试官:可以再优化这道编程题吗

246 阅读2分钟

面试编写

编写一个函数,将数组 [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到手~