使用JavaScript将数组转换为列表

使用JavaScript将数组转换为列表,javascript,arrays,flatten,Javascript,Arrays,Flatten,我正在通读,在第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 += ("

我正在通读,在第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]值:2,rest:null


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

您需要以
null
作为第一个
list
值开始

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


您所尝试的是一个错误的迭代,它检查一个元素,并从一个错误的值开始,然后通过添加字符串(而不是对象)将该值转换为字符串

函数数组列表(数组){
让list=null;
for(设i=array.length-1;i>=0;i--){
list={value:array[i],rest:list};
}
退货清单;
}
log(数组列表([1,2,3])您可以大大简化代码

有两种情况:要么数组是空的,在本例中转换为
null
,要么不是空的,在本例中只有第一个值重要,其余值可以在数组的其余部分上递归处理。这是一条单行线

const converter=arr=>arr.length?({value:arr[0],rest:converter(arr.filter(({,i)=>i>0))}):null;

log(转换器(['a','b','c'])通过正向迭代,您可以执行如下操作。在数组上迭代,在每次迭代中定义嵌套对象,直到到达最后一个元素,当到达最后一个元素时,将属性定义为
null

let data=[1,3,3];
设res={};
for(设i=0,obj=res;iconsole.log(res)
这可能是一个非常适合递归方法的问题:

函数数组列表(数组)
{

如果(array.length我认为您对代码中出现问题的原因有很好的答案,但如果您感兴趣,这是一个非常好的用例

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

log(l)
它不会将数组转换为列表,而是将数组转换为表示ArrayOpe的对象,它应该用
null
初始化,而不是
{}
哦,我明白了,所以你可以将值声明为
值:
,其余的声明为
其余:
-如果我理解正确,你不需要在它们周围加引号,因为它们是对象属性。好的一点是,保持该方法始终存在。