2016-02-22 68 views
1

我的形式有一個JavaScript列表的嵌套列表:扁平化對象的列表與對象

var list = [{id:1, data: "string", list: [ 
       {id:2, data: "string", list: [ 
       {id:3, data: "string", list: null}]}, 
       {id:4, data: "string", list: null}]}]; 

而且我希望它成爲的形式:

var list = [{id:1, data: "string", list: \\ original nested list or null, I don't care}, 
      {id:2, data: "string", list:}, 
      {id:3, data: "string", list:}, 
      {id:4, data: "string", list:}]; 

我有訪問underscore.js,但我還沒有能夠產生我想要的輸出。 我嘗試使用_.flatten_.pluck的組合來獲取底層列表,但我也需要id屬性,所以這不起作用。 我的猜測是我需要映射一個函數,但我現在對這個問題有點失落。

有人能幫助我嗎?

+1

[這樣?](HTTP:/ /stackoverflow.com/questions/18003083/underscore-to-flatten-nested-array-of-parent-child-objects) – mjr

回答

1

您可以使用遞歸來做到這一點:

function flatten(arr) { 
    if (!arr) { 
     return []; 
    } 
    return arr.reduce(function (r, i) { 
     return r.concat([i]).concat(flatten(i.list)); 
    }, []); 
} 

console.log(flatten(list)); 

隨着ES6語法(箭頭功能和傳播運營商)也可能是這樣的:

function flatten(arr) { 
    return arr ? arr.reduce((r, i) => [...r, i, ...flatten(i.list)], []) : []; 
} 
+1

謝謝,這正是我想要的 –