请求协助:用回调与高阶函数实现字符串数组复数化(遵循DRY原则)
代码修正与优化方案
原代码存在的问题
- 函数
pluralize中错误使用了未定义的变量animals,实际应使用传入的参数array - 手动编写循环遍历数组,未利用JavaScript数组内置方法,不够简洁,未充分遵循DRY(Don't Repeat Yourself)原则
修正后的代码
方案一:修复变量名问题,保留回调函数模式
function pluralize(array, callback) { let output = [] for (let i = 0; i < array.length; i++) { let pluralized = callback(array[i]) output.push(pluralized) } return output } function addS(str) { return str + 's' } // 使用示例 const animals = ['cat', 'dog', 'bird'] console.log(pluralize(animals, addS)) // 输出: ["cats", "dogs", "birds"]
方案二:利用数组map方法简化,更贴合DRY原则
数组的map方法本身就是用于遍历数组并返回新数组的工具,无需手动编写循环逻辑,避免重复造轮子:
function pluralize(array) { return array.map(str => str + 's') } // 使用示例 const animals = ['cat', 'dog', 'bird'] console.log(pluralize(animals)) // 输出: ["cats", "dogs", "birds"]
如果需要保留回调函数的扩展性(比如后续支持其他复数规则),也可以结合map实现:
function pluralize(array, callback) { return array.map(callback) } function addS(str) { return str + 's' } // 使用示例 const animals = ['cat', 'dog', 'bird'] console.log(pluralize(animals, addS)) // 输出: ["cats", "dogs", "birds"]
内容的提问来源于stack exchange,提问作者J Christian
相关产品推荐
相关产品推荐

