获取错误未捕获的TypeError:无法读取未定义的属性“ toLowerCase”

时间:2019-05-02 07:16:57

标签: javascript jquery

获取错误未捕获的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);

1 个答案:

答案 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);

为什么OP的代码不起作用?

有问题的代码使用递归。每当我们使用递归方法时,我们都应该有条件返回函数并再次调用它。

  • 现在考虑一下,数组length1
  • 然后array.slice(1)将返回[]
  • 一个空数组将传递给map()
  • 对于空数组array[0]将“未定义”
  • 然后,undefined将被传递到callback
  • undefined.toLowerCase引发错误。

结论

当数组中只剩下一个元素时,您无需运行部分.concat(map(array.slice(1),callback))。因为concat()

没有更多内容