[英]Flattening odd array structure javascript
可怕的嵌套数组:
x=[0,[1,[2,[3,[4,["five"],[5]]]],["to",["free",["floor"]]],["two",["three",["four"]]]]]
输出我想要的魔术功能:
magic(x)=>[[0,1,2,3,4,"five"],[0,1,2,3,4,5],[0,1,"to","free","floor"],[0,1,"two","three","four"]]
到目前为止:
magic(x)==>
this.unpack_gret = function(strut){
var lenstruc = strut.length;
var firstelem = strut.shift();
if (lenstruc > 1){
var maprecur = strut.map(function(item){
var retrecur = [firstelem].concat(this.unpack_gret(item))
return retrecur
});
if (maprecur.length > 1){return maprecur}
else {return maprecur[0];}
}
else {
return [firstelem];
};
};
我明白了:
[0,[1,2,3,[4,"five"],[4,5]],[1,"to","free","floor"],[1,"two","three","four"]]
不错,但也不存在。 有任何想法吗?
首先让我们打印你的输入数组,这样我才能看到我在做什么。
x =
[
0,
[
1,
[
2,
[
3,
[
4,
["five"],
[5]
]
]
],
[
"to",
[
"free",
["floor"]
]
],
[
"two",
[
"three",
["four"]
]
]
]
]
好的。 所以基本上它是一棵树,你想要一个所有分支的数组。 不应该太难......
function branchify(arr,branch,found) {
branch = branch || [];
found = found || [];
var leaf = arr.shift();
branch.push(leaf);
if( arr.length == 0) {
found.push(branch);
}
else {
arr.forEach(function(path) {
branchify(path,branch.slice(0),found);
});
}
return found;
}
var result = branchify(x);
正如他们所说,“塔达!”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.