拍平

作者: xingkong_s | 来源:发表于2019-09-30 15:53 被阅读0次

    数组拍平

        var arr = [1, [[[2, 3], 4, 5], 6]];
        function f(arr) {
            if (Object.prototype.toString.call(arr) !== "[object Array]")
                return;
            var newArr = [];
            var j = 0;
            function fn(arr) {
                for (var i = 0; i < arr.length; i++) {
                    if (arr[i].length && (j <= 3)) {
                        j += 1;
                        fn(arr[i]);
                    } else {
                        newArr.push(arr[i]);
                    }
                }
            }
            fn(arr);
            return newArr;
        }
        arr = f(arr);
        console.log(arr);
    

    对象拍平

    • 严格拍扁
        var arr = [{
            a: "0",
            s: [
                {a: "1", s: [{a: "2"}, {a: "3"}, {a: "4"}]}, 
                {a: "6", s: [{a: "7"}, {a: "8"}, {a: "9"}]},
                {e: "10"}
            ]
        }];
    
      
        function f(arr, str) {
            arr.map(function (e, i) {
                if (str in e) {
                    this.loop(e[str], str);
                }
            });
            return arr;
        }
        function loop(arr, str) {
            if (arr instanceof Array) {
                arr.map(function (er, ir) {
                    if (str in er) {
                        b(arr, er[str], ir);
                        delete er[str];
                        this.loop(arr, str);
                    }
                });
            }
        }
        function b(array, childArr, index) {
            var n = index + 1;
            childArr.map(function (e) {
                array.splice(n, 0, e);
                n++;
            });
            return array;
        }
        console.log(f(arr, "s"));
    
    • 只支持每层一项
       var arr = [
            {
                a: "0",
                s: [{
                    a: "1",
                    s: [{b: "2", s: [{c: "3"}]}]
                }]
            }
        ];
    
    var arr = [{a: "0", s: [{a: "1", s: [{b: "2", s: [{c: "3"}]}]}]}];
        function flatten(arr, str) {
            var array = [];
            arr.map(function (e, i) {
                getFlattenedObj(array, str, e);
            });
            return array;
        }
        function getFlattenedObj(newArr, str, obj) {
            if (str in obj) {
                if (obj[str] instanceof Array) {
                    obj[str].map(function (e) {
                        getFlattenedObj(newArr, str, e);
                    });
                    delete obj[str];
                }
            }
            newArr.unshift(obj);
        }
        console.log(flatten(arr, "s"));
    

    相关文章

      网友评论

          本文标题:拍平

          本文链接:https://www.haomeiwen.com/subject/vnoxpctx.html