如何将capitalizeThreeLetters函数应用于数组元素实现前三位大写?
解决数组批量应用
capitalizeThreeLetters函数的问题 原代码的问题
你的applyAll函数存在三个核心错误:
- 未接收第二个参数(要应用的处理函数),调用时传入的
capitalizeThreeLetters完全没被用到 - for循环里传入整个数组
arr给capitalizeThreeLetters,而非单个元素arr[i] - 第一次循环就执行
return,导致函数直接终止,无法遍历所有元素
正确实现方案
方案1:手动for循环收集结果
function applyAll(arr, fn) { const result = []; for (let i = 0; i < arr.length; i++) { result.push(fn(arr[i])); } return result; }
创建空数组存储处理后的结果,遍历每个元素,用传入的fn处理后推入结果数组,最后返回完整结果。
方案2:使用Array.map()(最简洁)
map方法的设计目标就是生成新数组,每个元素为原元素经指定函数处理后的结果,完美匹配需求:
function applyAll(arr, fn) { return arr.map(fn); }
方案3:使用forEach遍历
如果偏好forEach,需手动收集结果:
function applyAll(arr, fn) { const result = []; arr.forEach(item => { result.push(fn(item)); }); return result; }
优化capitalizeThreeLetters(处理短单词)
原函数遇到长度小于3的单词会报错(比如"hi"的str[2]是undefined,调用toUpperCase会抛出错误),可以优化兼容:
function capitalizeThreeLetters(str){ if (!str) return str; const firstThree = str.slice(0, 3).toUpperCase(); const rest = str.slice(3); return firstThree + rest; }
测试调用
console.log(applyAll(['mai', 'brian', 'jeho', 'han'], capitalizeThreeLetters)); // 输出:["MAI", "BRIan", "JEHo", "HAN"]
内容的提问来源于stack exchange,提问作者Millan Figueroa
相关产品推荐
相关产品推荐

