【发布时间】:2017-07-31 15:31:35
【问题描述】:
我有一组数组:
sample = [
{
'name' : 'alpha',
'inner' : [
{
'name' : 'beta',
'inner' : [
{
'name' : 'gamma',
'inner' : [
{
'name' : 'one',
'inner' : []
}
]
}
]
}
]
},
{
'name' : 'alpha',
'inner' : [
{
'name' : 'beta',
'inner' : [
{
'name' : 'gamma',
'inner' : [
{
'name' : 'two',
'inner' : []
}
]
}
]
}
]
},
{
'name' : 'epsilon',
'inner' : [
{
'name' : 'one',
'inner' : []
}
]
},
{
'name' : 'epsilon',
'inner' : [
{
'name' : 'two',
'inner' : []
}
]
}
]
我想递归合并到这个:
sample = [
{
'name' : 'alpha',
'inner' : [
{
'name' : 'beta',
'inner' : [
{
'name' : 'gamma',
'inner' : [
{
'name' : 'one',
'inner' : []
},
{
'name' : 'two',
'inner' : []
}
]
}
]
}
]
},
{
'name' : 'epsilon',
'inner' : [
{
'name' : 'one',
'inner' : []
},
{
'name' : 'two',
'inner' : []
}
]
}]
这是我目前所拥有的:
据我了解,它应该是这样工作的,这意味着有一个递归进入每个“内部”,然后合并数组。
function _merge(arr) {
//
var result = [];
//
for (var i = 0; i < arr.length; i++) {
var found = false;
//
for (var j = 0; j < result.length; j++) {
//
if ( result[j].name == arr[i].name) {
found = true;
//
result[j].inner = result[j].inner.concat(arr[i].inner);
//
break;
}
}
if (!found) {
//
result.push(arr[i]);
//
}
}
//
return result
//
}
//
function traverse(o ) {
for (i in o) {
if (!!o[i] && typeof(o[i])=="object") {
//
try{
//
build_array[i] = _merge(o[i])
//
}catch(e){
//
build_array = o[i]
//
}
//
traverse(o[i].inner );
}
}
}
//
感谢您的帮助
【问题讨论】:
-
我会请求你分享这个递归函数。是的,它可能会把我们引向错误的方向,但我们仍然会知道从哪里开始寻找
-
好的,我马上贴出来
-
这个问题好像少了一个问题?
标签: javascript arrays recursion hierarchical