2017-08-10 53 views
3

我有一個多維嵌套父/子陣列如下:使用Javascript - 嵌套父/子陣列遞歸函數,以展父母只

{ 
    parent: { 
    name: "foo" 
    }, 
    children: [ 
    { 
     parent: { 
     name: "asdf", 
     }, 
     children: [] 
    }, 
    { 
    parent: {}, 
    children: [] 
    }, 
    { 
    parent: {}, 
    children: [] 
    }, 
    ... 
    ] 
} 

我想要做的就是應用此陣列上的遞歸功能,扁平化只是parent屬性,並保持兒童-是,爲了得到這樣的:

{ 
    name: "foo", 
    children: [ 
    { 
     name: "asdf", 
     children: [] 
    }, 
    { 
    children: [] 
    }, 
    { 
    children: [] 
    }, 
    ... 
    ] 
} 

我嘗試使用underscore.js但我無法找到一個遞歸函數,可以做的伎倆。有什麼想法嗎?

+0

是有它的一些陣列?對於孩子也許? –

+0

是的孩子是一個數組。我編輯了我的問題,謝謝你的評論! – Pola

回答

3

您可以通過迭代數組並更新所需屬性來使用迭代和遞歸方法。

如果找到孩子,再次迭代。

var array = [{ parent: { name: 'a', surname: 'b', }, children: [{ parent: { name: 'c', surname: 'd', }, children: [{ parent: { name: 'e', surname: 'f' } }], childrenName: 'v', childrenSurname: 'w' }], childrenName: 'x', childrenSurname: 'y' }]; 
 

 
array.forEach(function iter(object) { 
 
    if (object.parent) { 
 
     object.name = object.parent.name; 
 
     object.surname = object.parent.surname; 
 
     delete object.parent; 
 
    } 
 
    object.children && object.children.forEach(iter); 
 
}); 
 

 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

謝謝!像魅力一樣工作! – Pola

0

希望這recurse的功能是什麼,你需要

const recurse = (data) => { 
    for(let i = 0, l = data.length; i < l; i++){ 
     if(data[i]['parent']){ 
      data[i]['name'] = data[i]['parent']['name'] 
      delete data[i]['parent'] 
     } 
     if(data[i]['children']) recurse(data[i]['children']) 
    } 
}