2017-10-17 14 views
1

配列をオブジェクト(オブジェクトを含む)に変換しようとしています。最初のオブジェクトは次のペア値に接続されています。リストへの配列Javascript

これは私がこれまでにやっていることです:

var myArray = [1,2,3] ; 
function arrayToList() 
{ 
    var myList = Object.keys(myArray).map(function(key){ 

     return { value: myArray[key],rest:myArray[key]}  

    }); 
    console.log(myList); 
} 
arrayToList(myArray); 

を。これは、このように返す必要があります:

var list = { 
    value: 1, 
    rest: { 
    value: 2, 
    rest: { 
     value: 3, 
     rest: null 
    } 
    } 
}; 

、[1,2,3]

+0

:myarrayの[キー]' 'arrayToList()'をもう一度呼びますが、最終的に再帰を止めるようにオフセットを与えます。 – theGleep

+0

'Object.keys(myArray)'は、オブジェクトではなく配列を持っているので意味をなさない。 – epascarello

+0

アレイが空のときの出力をどのようにしたいですか?それはちょうど 'null'を返しますか? – 4castle

答えて

3

の配列を与えられたとき、使用Array#reduceRight

function arrayToList(arr) { 
 
    return arr.reduceRight((rest, value) => ({ value, rest }), null); 
 
} 
 

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

+0

これは動作していますが、ブラウザの2番目の値を展開すると消えてしまい、値1と値3が表示されます。List to Arrayを逆にしたい場合、もう1つのことは何ですか?最初の出力は{value:1、rest:{...}} rest:rest:rest:nullvalue:3__proto__:Objectvalue:2__proto__:Objectvalue:1__proto__:Object –

+0

@NaumanMughal値は消えません。ブラウザは展開されたオブジェクトの下にブラウザを表示します。必要に応じて、より明確にするために 'console.log(JSON.stringify(arrayToList([1,2,3]));'を実行することができます。 – Vasan

1

これは単純な1ライン再帰(ES6と特にいい)関数によく向いている:

代わり残り `残部の

function tolist([value, ...rest]) { 
 
     return {value, rest: rest.length ? tolist(rest): null} 
 
} 
 

 
console.log(tolist([0, 2, 3, 4]))

関連する問題