2016-06-18 4 views
1

昨日私は質問をしましたが、この問題を解決することができましたが、今日再試行した後、私が自分自身で行ったことが機能していない理由を理解できません。私の質問は基本的に、なぜ私はこれを記録するとき、それは私の配列の最初の要素(20値)をスキップしているのですか?私の推測では、30は前の場所に上書きされていますが、実際にはの意味がありません。です。ここに私の考えがありますオブジェクト内のタイプをループする

最初に私たちのリストはvalue:10, rest:nullになりました。i = 1となるので、値を20に追加し、rest:nullを既存のrestに追加します。これvalue:10, rest: value:20, rest:nullを取得し、あなたは、I = 1で始まるので、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

の値について同じ、それは私= 0でなければなりません。 配列はJavaScriptベースで(そして基本的に他のすべての言語で)0ベースです。

+0

。リストの最初の要素はすでに0であらかじめ定義されています。ゼロでforループを開始すると、繰り返しごとに値が返されます。10 –

0

私の推測では、30は右の前のスポット

を上書きしていることです。各ループ反復で、list.restプロパティを上書きしています。したがって、最終的にvalueプロパティは最後の配列値で埋められます30

+0

この問題を解決するにはどうすればよいですか? –

+0

私は完全な期待結果(結果オブジェクト)を表示します。どのようにそれらの3つの入力値を探すべきかを示してください – RomanPerekhrest

+0

例えば10,20,30の配列入力は値:10、残り:値:20、残り:値:30、残り:null –

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 } 
    ] 
} 
+0

ほとんど私が欲しいものです。私は2番目の残り(値20)をもう一度値30にしたい:残りはnull –

2

このオブジェクトを返します。再帰関数の概念を使って、それを素早く正確にするべきだと思います。 iは、配列内のインデックスを表し、

ここ
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)); 

次のコードを使用してください。これがあなたの問題を解決することを願っています。それは私のシステムでうまくいった。私が得た

結果は次のとおりです。

{ 
    value: 10, 
    rest: { 
     value: 20, 
     rest: { 
      value: 30, 
      rest:null 
     } 
    } 
} 

グッドラック!!!!

+0

美容。このコードが何をしているのかを説明できますか?同じ答えを持つ代替ソリューションです。私は "prev"を使用する目的が何であるか理解していません。 http://stackoverflow.com/questions/37884651/looping-through-objects-and-ad-types/37884688?noredirect=1#comment63228444_37884688 –

+0

'prev'は、リスト内の' rest'キーの追跡を助けます。以前に挿入された値の '残りの部分 'に新しい値を挿入することができます。 – thisisbobbs

+0

私のコードはメモリと時間が少なくても同じです。 – thisisbobbs

0

再帰的ソリューションをお勧めします。

function arrayToList(array, i){ 
    if(!i){i=0;} 
    if(i == array.length){ 
     return null ; 
    } 
    return { value: array[i], rest: arrayToList(array, i+1) }; 
} 

その後:

すべての問題を解決したり、意味をなすdoesen't
console.log(arrayToList([10,20,30])); 
+0

同じソリューションは既に@BABUによって提示されました – RomanPerekhrest

+0

同じ解決策ではありません。もう一度確認してください –

+0

主なアイデア(再帰関数)は同じですが、残りの部分は無視できます – RomanPerekhrest

関連する問題