使用 JavaScript 将数组转换为列表

新手上路,请多包涵

我正在通读 Eloquent JavaScript ,在第 4 章的末尾,它挑战你将数组转换为列表,即

[1, 3, 3] --> {value: 1, rest: {value: 2, rest: {value: 3, rest: null}}};

而且我不认为我理解这个概念。

它建议向后遍历数组,所以我尝试过:

 function arrayToList(array) {
    let list = {};
    for (let i = array.length -1; i > array[0]; i--) {
        list += ("value:" + i + ", rest: null");
    }
    return list;
}

console.log(arrayToList([1, 2, 3]));

这注销:

[object Object]value:2, rest: null

如您所见,我不了解如何通过迭代创建“嵌套”对象(列表)。有人可以向我解释一下吗?

原文由 SpeakInCode43 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 868
2 个回答

您需要从 null 开始,作为第一个 list 值。

然后,您需要遍历索引从最后一个到零的元素,并分配一个新的 list 对象,其实际值为数组和前一个列表 rest


您尝试过的是通过检查元素并以错误值开始的错误迭代,该错误值后来通过添加字符串而不是对象转换为字符串。

 function arrayToList(array) {
    let list = null;
    for (let i = array.length - 1; i >= 0; i--) {
        list = { value: array[i], rest: list };
    }
    return list;
}

console.log(arrayToList([1, 2, 3]));

原文由 Nina Scholz 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为您对代码中出现问题的原因有很好的答案,但以防万一您感兴趣,这是一个非常漂亮的用例 reduceRight()

 let a = [1, 3, 3]
let l = a.reduceRight((rest, val) => ({val, rest}), null)

console.log(l)

它或多或少与您的代码所做的相同 - 从 null 开始并在列表中向后循环,同时将先前的结果编译到 rest 属性中。

原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题