雄辩的Javascript, listToArray.为什么我的for循环返回rest [object]当输入数组有超过

Eloquent Javascript, listToArray. Why does my for loop return rest [object] when input array has more than 3 elements

本文关键字:object 输入 数组 rest 返回 Javascript listToArray 为什么 循环 for 我的      更新时间:2023-09-26

我目前正在阅读Eloquent Javascript第4章。练习问

写一个函数arrayToList,当给定[1,2,3]作为参数

时,它建立一个类似于前面的数据结构

使用下面的代码,我可以得到必要的输出-但只有当数组中的元素数量是3或更少。

function createNode (value, rest) {
  return {
    value: value,
  rest: rest }
};

function arrayToList(arr) {
  var index = arr.length;
  firstNode = createNode(index,null);
  listBuild = firstNode;
for (i =(index-1); i >0; i--) {
  listBuild = createNode(i,listBuild)
}

arrayToList([1,2,3])返回"{value: 1, rest: {value: 2, rest: {value: 3, rest: null}}"

arrayToList([1,2,3,4])输出"{value: 1,:{值:2:{值:3: } } }"

在这种情况下,为什么这个函数生成[Object]的rest属性?

谢谢!

你的函数似乎工作得很好,所以我怀疑这是一个输出问题,而不是你的代码的任何问题。

如果你使用Node.js来测试你的代码,那么你就会遇到console.log的实现问题。在Node.js中,console.log使用util.inspect格式化对象,默认情况下util.inspect只显示深度为2的嵌套对象。您可以通过直接调用util.inspect并使用depth选项来改变这一点。您可以将其设置为更高的数字,或者您可以将其设置为null以实现无限深度:

var util = require('util');
var result = arrayToList([1,2,3,4]);
console.log(util.inspect(result, { depth: null }));