2014-02-06 111 views
0

我有對象的這樣的陣列:從最後一個對象水平移動到第一個

var Categories = [ 
    {n:'1st category',u:1,s:[{n:'Sub category',u:2,s:[{n:'Sub sub category',u:3,s:[]},{n:'Sub sub category 2',u:4,s:[]},{n:'Sub sub category 3',u:5,s:[]}]},{n:'Sub category',u:6,s:[{n:'Sub sub category',u:7,s:[]},{n:'Sub sub category 2',u:8,s:[]},{n:'Sub sub category 3',u:9,s:[]}]},{n:'Sub category',u:10,s:[{n:'Sub sub category',u:11,s:[]},{n:'Sub sub category 2',u:12,s:[]},{n:'Sub sub category 3',u:13,s:[]}]}]}, 
    {n:'2nd category',u:14,s:[{n:'Sub category',u:15,s:[{n:'Sub sub category',u:16,s:[]},{n:'Sub sub category 2',u:17,s:[]},{n:'Sub sub category 3',u:18,s:[]}]}]}, 
    {n:'3rd category',u:19,s:[{n:'Sub category',u:20,s:[{n:'Sub sub category',u:21,s:[]},{n:'Sub sub category 2',u:22,s:[]},{n:'Sub sub category 3',u:23,s:[]}]}]} 
]; 

圖例: N - 名稱,U - 編號,S - 子類別(innter類別),其還含有n,u和s。

因此,子類別的深度總是在變化並且不是固定的。是否可以做一個函數來查找所有的母/母類別名稱?

喜歡,如果我要搜索id 2(u = 2),它會找到我u1,所以直到子類別的方式是:1st category> Sub category,if we will look for u = 6:Sub sub類別>子類別>第一類。

我也許應該使用遞歸函數對於這一點,但我不認爲應該是一個邏輯..有什麼建議?

+0

你找不到*母公司*或*在JavaScript(財產的持有人*除非你在屬性值跟蹤它的地方本身)。 – techfoobar

回答

1

例如:

findCat = function(u, obj) { 
    if(obj.u == u) 
     return []; 
    for(var i = 0; i < obj.s.length; i++) { 
     var p = findCat(u, obj.s[i]); 
     if(p) 
      return p.concat([obj.s[i].n]) 
    } 
    return null; 
} 

path = findCat(22, {s:Categories}) 

結果:

[ 
"Sub sub category 2", 
"Sub category", 
"3rd category" 
] 
+0

謝謝,良好的工作解決方案:) – Tautvydas

0

我認爲,解決這個問題最簡單的方法是調整你的名單到具有與父母-ID構件和對象,而這兩個對象(所以這些都是超水平類別)的基於ID的地圖。然後

你的地圖會是這樣的:

{ 
    1: {n: '1st Category'} 
    2: {n: 'Sub category', parent-id: 1} 
    3: {n: 'Sub sub category', parent-id: 2} 
    14: {n: '2nd Category'} 
} 

這將使尋找路線,某些類別的瑣碎和獲得的頂級類別列表也只是對一個對象是否有父ID字段篩選或不。

編輯:這是否是有吸引力與否可能,當然取決於它是否爲您實現足夠快的速度,你需要優化什麼功能。

相關問題