2017-10-17 148 views
1

我想將數組轉換爲列表(包含對象),並將第一個對象連接到下一對值。Array to List 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

它正在工作,但是當您在瀏覽器中展開第二個值時,它會消失,並且您可以看到它的值爲1和值3.如果要對List執行反向操作,可以執行什麼操作?第一個的輸出是{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]))