面试题答案
一键面试实现思路
- 利用标签函数接收模板字符串的各个部分以及对应插值的值。
- 递归遍历嵌套对象,将其展开为需要的文本格式。
- 拼接各部分文本,形成最终格式化输出。
标签函数工作原理
标签函数在模板字符串前被调用,它的第一个参数是一个数组,包含模板字符串中不包含插值的部分。后续参数是模板字符串中插值表达式的值。标签函数可以根据这些参数进行自定义处理,返回最终的字符串。
代码实现
function formatData(template,...values) {
let result = '';
for (let i = 0; i < template.length; i++) {
result += template[i];
if (i < values.length) {
if (typeof values[i] === 'object') {
result += Object.values(values[i]).join(', ');
} else {
result += values[i];
}
}
}
return result;
}
const data = { name: 'John', age: 30, address: { city: 'New York', street: '123 Main St' } };
const output = formatData`Name: ${data.name}, Age: ${data.age}, Address: ${data.address}`;
console.log(output);
确保可维护性和扩展性
- 模块化:将格式化逻辑封装在一个函数中,便于复用和修改。
- 注释:在关键代码处添加注释,说明代码功能和作用,提高可读性。
- 错误处理:添加必要的错误处理,如处理
values
中可能出现的非对象或非基本类型值,防止程序崩溃。 - 扩展性:对于更复杂的嵌套结构,可以进一步优化递归逻辑,使其能够处理多层嵌套,并且支持不同类型嵌套对象的格式化。例如,对于数组嵌套也能正确处理。