工作中一個遞歸寫不出,求高手幫忙,采納有打賞,謝謝,Thanks?(?ω?)?
有如下一段數(shù)據(jù)
[{
id: '1',
name: '姓名1',
items: [
{
id: '2',
name: '姓名2',
items: [
{
id: '3',
name: '姓名3',
items: [
{
id: '4',
name: '姓名4',
},
],
},
],
},
{
id: '5',
name: '姓名5',
},
{
id: '6',
name: '姓名6',
},
],
},
{
id: '7',
name: '姓名7',
}];
要求有一個函數(shù),傳入一個id值,從數(shù)據(jù)中找到id為傳入id的對象,以及這個對象的所有父級對象
比如,傳入id為'5',返回
[{id: '5', name: '姓名5'}, {id: '1', name: '姓名1'}]
傳入id為'3',返回
[{id: '3', name: '姓名3'}, {id: '2', name: '姓名2'}, {id: '1', name: '姓名1'}]
謝謝大家?guī)椭鷡~~
let root = [{
id: '1',
name: '姓名1',
items: [
{
id: '2',
name: '姓名2',
items: [
{
id: '3',
name: '姓名3',
items: [
{
id: '4',
name: '姓名4',
},
],
},
],
},
{
id: '5',
name: '姓名5',
},
{
id: '6',
name: '姓名6',
},
],
}];
function search(root, id) {
for (let i = 0; i < root.length; i += 1) {
if (root[i].id === id) {
return [{ id, name: root[i].name }];
}
}
for (let i = 0; i < root.length; i += 1) {
if (root[i].items && Array.isArray(root[i].items)) {
const res = search(root[i].items, id);
if (res.length) return [...res, { id: root[i].id, name: root[i].name }];
}
}
}
console.log(search(root, '5'));
console.log(search(root, '3'));
let root = {
id: '1',
name: '姓名1',
items: [
{
id: '2',
name: '姓名2',
items: [
{
id: '3',
name: '姓名3',
items: [
{
id: '4',
name: '姓名4',
},
],
},
],
},
{
id: '5',
name: '姓名5',
},
{
id: '6',
name: '姓名6',
},
],
};
function search(root, id) {
if(root.id == id) return [ { id: id, name: root.name} ];
else {
for(let item of (root.items || [])) {
let res = search(item, id);
if(res.length) return [ ...res, { id: root.id, name: root.name } ];
}
return [];
}
}
console.log(search(root, '5'));
console.log(search(root, '3'));
思路和“使用遞歸實現(xiàn)逆序打印用戶輸入的字符串”類似,每一層遞歸返回該層搜索到的路徑,空數(shù)組代表搜索失?。划斣搶舆f歸得到下層遞歸返回的結(jié)果后,就把當前節(jié)點加入路徑中,然后向上層返回。
如果需要搜索的樹特別大的話最好是優(yōu)化一下返回的方式,我這種寫法每次都會生成一個新的數(shù)組對象,你可以用Array.push
把同一個路徑傳遞下去。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。