循环访问对象中的类型

时间:2016-06-18 12:04:52

标签: javascript

好的,所以昨天我问了一个问题,我能够解决这个问题,但今天重试之后,我真的不明白为什么我自己所做的并不工作。我的问题基本上就是,为什么当我记录它时,它是否跳过我的数组的第一个元素(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]);

5 个答案:

答案 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]));