获取错误未捕获的TypeError:无法读取未定义的属性“ toLowerCase” 在执行此代码时。
const map = (array, callback) => {
return [callback(array[0])].concat(map(array.slice(1),callback));
}
var lower = map(['A','B','C'],function (val) {
return val.toLowerCase()
});
console.log(lower);
答案 0 :(得分:0)
您需要检查数组length
是否为1
,然后仅返回该元素,因为没有其他元素了。
const map = (array, callback) => {
if(array.length === 1) return [callback(array[0])]
return [callback(array[0])].concat(map(array.slice(1),callback));
}
var lower = map(['A','B','C'],function (val) {
return val.toLowerCase()
});
console.log(lower);
似乎您想创建自己的map()
。认为循环比递归好。
const map = (array, callback) => {
let res = []
for(let i = 0;i<array.length;i++){
res[i] = callback(array[i],i)
}
return res;
}
var lower = map(['A','B','C'],function (val) {
return val.toLowerCase()
});
console.log(lower);
有问题的代码使用递归。每当我们使用递归方法时,我们都应该有条件返回函数并再次调用它。
length
是1
array.slice(1)
将返回[]
map()
。array[0]
将“未定义” undefined
将被传递到callback
undefined.toLowerCase
引发错误。 当数组中只剩下一个元素时,您无需运行部分.concat(map(array.slice(1),callback))
。因为concat()