經(jīng)過操作產(chǎn)生以下數(shù)組
var arr = [
{"pid":"12dassdf",
"source":{"id":"sd1a3","component":"ordinary"},
"target":{"id":"sdbf3","component":"ordinary"}
},
{"pid":"ccdassdf",
"source":{"id":"sd123","component":"start"},
"target":{"id":"sd1a3","component":"ordinary"}
},
{"pid":"1gdassdf",
"source":{"id":"er12a","component":"ordinary"},
"target":{"id":"sdop3","component":"end"}
},
{"pid":"62dayhdf",
"source":{"id":"sdbf3","component":"ordinary"},
"target":{"id":"sd3bn","component":"ordinary"}
},
{"pid":"7udassdf",
"source":{"id":"sd3bn","component":"block"},
"target":{"id":"er12a","component":"ordinary","arclist":{"nodes":[{"pid":"結(jié)構(gòu)同上"},...]}}
},
]
求最后生成一個,start 開頭的對象順序數(shù)組:
var newarr = [{"id":"sd123","component":"start"},
{"id":"sd1a3","component":"ordinary"},
...,{"id":"sdop3","component":"end"}]
本來以為很簡單的,找到 start 那組,拿到 target,然后根據(jù) target 的 id,去循環(huán)匹配 source 的 id,push 到空數(shù)組。
可是實際編碼中,普通 for 循環(huán)只找打第一個就停止了,再加上還有內(nèi)部嵌套,又加了個遞歸,一試就變成了死循環(huán)
不知道是不是這個意思,沒有對arclist進行處理,如果需要的話,可以對node執(zhí)行一下recursion
function sortStart(arr) {
var origin = arr
var result = []
var start =origin.filter(item => item.source.component === 'start')[0]
result.push(start.source)
recursion(origin, start, result)
return result
}
function recursion(origin, start, result) {
if (start.source.component === 'end') {
result.push(start.source)
return result
}
start = origin.filter(item => start.target.id === item.source.id)[0]
result.push(start.source)
if (start.target.component === 'end') {
result.push(start.target)
return result
} else {
recursion(origin, start, result)
}
}
[ { id: 'sd123', component: 'start' },
{ id: 'sd1a3', component: 'ordinary' },
{ id: 'sdbf3', component: 'ordinary' },
{ id: 'sd3bn', component: 'block' },
{ id: 'er12a', component: 'ordinary' },
{ id: 'sdop3', component: 'end' } ]
思路供參考
const sourceMap = new Map(arr.map(x => ([x.source.id, { visited: false, data: x }])))
let it = arr.find(x => x.source.component === 'start')
const result = [it.source]
while (it.target.component !== 'end') {
const o = sourceMap.get(it.target.id)
if (o.visited) { throw new Error('dead loop :', data) }
o.visited = true
it = o.data
result.push(it.target)
}
console.log(result)北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通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)師。