Eloquent Javascript,listToArray。当输入数组有超过3个元素

时间:2015-08-03 05:38:53

标签: javascript arrays rest

我目前正在使用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属性?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的功能似乎工作正常,所以我怀疑这是输出问题,而不是您的代码有任何问题。

如果您使用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 }));