晴明的博客园 GitHub      CodePen      CodeWars     

[js] xD-Arrays

 #   (...参数)可以直接将参数转换成数组形式

            function arrCreate(a, b) {
                var arr = [];
                for (var i = 0; i < a; i++) {
                    if (typeof b == "function")
                        arr[i] = b();
                    else arr[i] = b;
                }
                //console.log(arr );
                return arr;
            }
            var arrFinal = [];

            function dim(...args) {
                console.info(args );
                var arr = new Array(args[0]);
                if (args.length != 2) {
                    for (var i = 0; i < args[0]; i++) {
                        //console.log(args);
                        arr[i] = dim.apply(null, args.slice(1));
                    }
                } else {
                    return arrCreate(args[0], args[1]);
                }
                console.log(arr );
                return arr;
            }

 

 

#

            function dim() {
                var arr = [].slice.call(arguments);
                var l = arr.length;
                var value = arr[l-1];
                //console.log(value);
                for (var i = l - 1; i > 0; i--) {
                    var temp = [];
                    for (var j = 0; j < arr[i-1]; j++) {
                        if (typeof arr[i] == 'function') {
                            value = arr[i]();
                            console.warn(value);
                        }
                        //console.warn(value);
                        temp.push(value);
                    }
                    value = temp;
                }
                console.info(value);
                return value;
            }
            dim(3, 3, "x") // => [['x','x','x'],['x','x','x'],['x','x','x']]
            dim(2, 2, 2, 0) // => [[[0,0],[0,0]],[[0,0],[0,0]]]
            dim(3, true) // => [true,true,true]
            var xxx = function() {
                return "xX"
            }
            dim(2, 5, xxx) // => [['xX','xX','xX','xX','xX'],['xX','xX','xX','xX','xX']]
                //            // if function provides different value on each iteration
                //            // then produced subarrays must should be different!
            var rnd = function() {
                return ~~(Math.random() * 3)
            }
            dim(3, 2, rnd) // => (depends on results of rnd) 
                // eg: [[0,1],[2,1],[0,0]]

 

posted @ 2016-04-26 19:01  晴明桑  阅读(236)  评论(0)    收藏  举报