2014-02-06 70 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字段筛选或不。

编辑:这是否是有吸引力与否可能,当然取决于它是否为您实现足够快的速度,你需要优化什么功能。

相关问题