繁体   English   中英

展平奇数阵列结构javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM