javascript – 为什么这个数组未定义时,我调用.length?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么这个数组未定义时,我调用.length?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从 Eloquent JavaScript( see ‘a list’ at bottom of linked page)的书中练习.基本上,我想让一个需要一个数组的对象,并将其转换成具有以下结构的列表:
var list = {
  value: 1,rest: {
    value: 2,rest: {
      value: 3,rest: null
    }
  }
};

当我在控制台中运行下面的代码时,我得到TypeError:无法读取未定义的属性’length'(函数arrayToList中的第3行).为什么我要调用的数组?长度未定义?

function arrayToList(array){
    var list = {};
    if(!array.length){
        list.value = null;
    }
    else{
        list.value = array.shift();
        list.rest = arrayToList();
    }
    return list;
}

console.log(arrayToList([10,20]));

注意:Stack Overflow问题List data structures in JavaScript是一个非常类似的帖子在同一个问题.我不是在这里寻找一个解决方案,就像在递归调用中发生什么事情一样.

解决方法

list.rest = arrayToList();

由于您没有将任何参数传递给arrayToList,因此数组将具有默认值undefined.这就是为什么它失败了

TypeError: Cannot read property ‘length’ of undefined

因此,在递归调用期间,您应该再次将数组传递给arrayToList.

function arrayToList(array) {
    var list = {};
    if (!array.length) {
        list.value = null;
    } else {
        list.value = array.shift();
        list.rest = arrayToList(array);   // Pass the `array` after shifting
    }
    return list;
}

console.log(arrayToList([10,20]));
# { value: 10,rest: { value: 20,rest: { value: null } } }
原文链接:https://www.f2er.com/js/149867.html

猜你在找的JavaScript相关文章