要求:实现一个函数,它接受一个数组和处理每个元素的回调函数,返回一个新数组,新数组的元素为原数组元素应用回调函数的结果。
// 声明一个函数,该函数接受一个数组和一个回调函数作为参数
function customMap(array, callback) {
// 首先检查输入是否合法
// 第一个参数必须是一个数组
if (!Array.isArray(array)) {
throw new TypeError('The first argument must be an array')
}
// 第二个参数必须是一个函数
if (typeof callback !== 'function') {
throw new TypeError('The second argument must be a function')
}
// 创建一个新数组,用于存储变换后的元素
const result = []
// 遍历数组,应用回调函数到每个元素,并存储结果
for (let i = 0; i < array.length; i++) {
result.push(callback(array[i], i, array))
}
// 返回新构建的数组
return result
}
// 使用示例
const numbers = [1,2,3,4,5]
const doubled = customMap(numbers, num => num * 2)
console.log(doubled);
代码解析
- 参数检查:首先检查传入的参数是否符合预期。第一个参数应该是一个数组,第二个参数应该是一个函数。
- 创建结果数组:定义一个空数组
result
,用来存放每次调用回调函数后的结果。 - 遍历原数组:使用
for
循环遍历数组的每个元素。对于数组中的每个元素,调用回调函数callback
,并将返回的结果放入结果数组result
中。回调函数接收三个参数:当前元素、当前元素的索引、原数组。 - 返回新数组:在遍历完成后,返回填充了所有新元素的结果数组。