老师,我按照你的代码逻辑在leetcode提交代码,报Cannot read property 'length' of undefined错误

来源:3-3 电话号码组合-代码演示

朱青1900

2019-08-22

我的代码:

function letterCombinations(digits){

	let map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] //用于映射1-9的输入(0就是空,1就是1,2是abc,以此类推)
	let num = digits.split('')	//把输入的数字转成数组(例如1234转成[1,2,3,4])

	let code = []	//保存映射后的内容,如23映射后=>['abc','def']

	num.forEach(item =>{

		if(map[item]){	//如果输入的值对应map存在匹配项
			code.push(map[item])	//进行映射,然后填入code
		}

		let comb = (arr) =>{	//声明一个方法,给他一个数组,就可以进行合并
			let tmp = []	//临时变量,存储前两项合并的结果,还要把这个结果放入到arr(code)中
			
			//遍历前两项(两层循环)
			for (let i = 0, il = arr[0].length; i < il; i++) {
		        for (let j = 0, jl = arr[1].length; j < jl; j++) {
		          tmp.push(`${arr[0][i]}${arr[1][j]}`)
		        }
		    }

			//splice替换掉code前两项
			arr.splice(0,2,tmp)

			//递归
			if(arr.length>1){
				comb(arr)
			}else{
				return tmp
			}

			return arr[0]	//数组最后就一个元素,返回数组第一个元素的内容
		}
		//code调用comb函数
		return comb(code)

	})

}

报错:

Line 19 in solution.js
				for(let j=0;j<arr[1].length;j++){
				                     ^
TypeError: Cannot read property 'length' of undefined
    Line 19: Char 26 in solution.js (comb)
    Line 37: Char 10 in solution.js (num.forEach.item)
    at Array.forEach (<anonymous>)
    Line 8: Char 6 in solution.js (letterCombinations)
    Line 54: Char 19 in solution.js (Object.<anonymous>)
    Line 16: Char 8 in runner.js (Object.runner)
    Line 42: Char 26 in solution.js (Object.<anonymous>)
    Line 689: Char 30 in loader.js (Module._compile)
    Line 700: Char 10 in loader.js (Object.Module._extensions..js)
    Line 599: Char 32 in loader.js (Module.load)

老师,这是为什么,一时想不懂。

写回答

1回答

朱青1900

提问者

2019-08-22

不好意思老师,我知道哪点问题了


0
2
Sixteen_mm
回复
快乐动起来呀
、老师,是因为arr[1]可能不存在是吗?
2022-04-26
共2条回复

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程