好的,所以昨天我问了一个问题,我能够解决这个问题,但今天重试之后,我真的不明白为什么我自己所做的并不工作。我的问题基本上就是,为什么当我记录它时,它是否跳过我的数组的第一个元素(20值)。我的猜测是30会覆盖之前的位置,但我无法理解为什么。这是我的事情
首先,我们的列表为value:10, rest:null
,现在i = 1,因此我们会在预先存在的rest:null
中添加值20和另一个rest
。因此得到value:10, rest: value:20, rest:null
,然后得到30的值。
function arrayToList(array)
{
var list = {value : array[0], rest: null } ;
for ( i = 1 ; i<array.length ; i++)
{
list.rest = { value: array[i], rest:null}
}
return list;
}
console.log(arrayToList([10,20,30]);
答案 0 :(得分:2)
你正在用你的每次遍历覆盖休息的价值。我认为你应该使用递归函数的概念来使其快速准确。
请使用以下代码:
function arrayToList(array, i){
if(i == array.length){
return null ;
}
return { value: array[i], rest: arrayToList(array, i+1) };
}
console.log(arrayToList([10,20,30], 0));
这里,i
表示数组中的索引。我希望这能解决你的问题。它在我的系统上运行良好。
我得到的结果是:
{
value: 10,
rest: {
value: 20,
rest: {
value: 30,
rest:null
}
}
}
祝你好运!!!!
答案 1 :(得分:1)
我想你想要将剩余的值添加到rest
。如果是这样,您应该将其声明为数组而不是null
function arrayToList(array) {
var list = { value: array[0], rest: [] };
for(i = 1; i < array.length; i++) {
list.rest.push({ value: array[i], rest: null });
}
return list;
}
console.log(arrayToList([10, 20, 30]));
上面的代码将返回此对象
{
value: 10,
rest: [
{ value: 20, rest: null },
{ value: 30, rest: null }
]
}
答案 2 :(得分:0)
因为你从i = 1开始,它应该是i = 0。 数组在JavaScript中基于0(基本上是所有其他语言)。
答案 3 :(得分:0)
我的猜测是30会覆盖之前的位置
没错。您在每次循环迭代时覆盖list.rest
属性。因此,最后value
属性将填充最后一个数组值30
答案 4 :(得分:0)
建议采用递归解决方案:
function arrayToList(array, i){
if(!i){i=0;}
if(i == array.length){
return null ;
}
return { value: array[i], rest: arrayToList(array, i+1) };
}
然后:
console.log(arrayToList([10,20,30]));