完善logger函数:实现对字符串每个字符调用传入函数并返回结果
修复后的 logger 函数
首先,原代码存在几个关键问题:
newStr被初始化为字符串,但使用了数组的push()方法,这会直接引发报错- 循环内部直接
return newStr,仅执行一次迭代就返回结果,无法处理字符串中的所有字符 - 变量
i未用let/const声明,会成为全局变量,引发潜在的作用域问题 - 调用
func时未传入当前遍历的字符,无法实现对每个字符的针对性处理
以下是几种修复方案:
方案1:返回处理后的结果数组
如果需要保留每个字符调用 func 后的独立结果(比如 func 返回数字或其他非字符串类型),可以返回数组:
function logger(func, str) { const results = []; for (let i = 0; i < str.length; i++) { results.push(func(str[i])); } return results; }
方案2:返回拼接后的字符串
如果 func 对每个字符处理后返回字符串,需要将结果拼接成最终字符串:
function logger(func, str) { let newStr = ''; for (let i = 0; i < str.length; i++) { newStr += func(str[i]); } return newStr; }
方案3:使用数组方法简化代码
利用 split() 将字符串转为字符数组,再用 map() 遍历处理,代码更简洁:
// 返回结果数组 function logger(func, str) { return str.split('').map(func); } // 若需返回拼接后的字符串,追加 join('') function logger(func, str) { return str.split('').map(func).join(''); }
内容的提问来源于stack exchange,提问作者Alex Starr
相关产品推荐
相关产品推荐

