创建二维数组封装

"Hello World, Hello Blog"

Posted by wudimingwo on December 15, 2018

刚才看 有一个小地方还有点小用 创建二维数组.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            Array.matrix = function (row, col, inital) {
            	var arr = [];
            	for(var i = 0; i < row; i++) {
            	  var colom = [];
            	  for(var j = 0; j < col; j++) {
            	    colom[j] = inital;
//          	    arr[i][j] = inital;// 可读性较差
            	  }
            	  arr[i] = colom;
            	}
              return arr
            }

其实也没必要, 一般我们创建一个一维数组的时候,压根不需要什么方法.
直接 var arr = [] 就完事了.

但二维数组的定义,好歹也得写好几行,可以考虑弄个api

可以弄个遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
            Array.prototype.SqEach = function (fn) {
              var len1 = this.length;
              var len2 = this[0].length;
            	for(var i = 0; i < len1; i++) {
            	  for(var j = 0; j < len2; j++) {
            	    fn(this[i][j],i,j,this[i],this);// 后面的参数我怀疑压根都不需要..
            	  }
            	}
            }
            function handle (item,i,j) {
            	console.log(item, i, j);
            }
            arr.SqEach(handle);

这会感觉,上面的inital,有点不灵活, 或许可以这样?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
            Array.matrix = function (row, col, inital) {
            	var arr = [];
            	for(var i = 0; i < row; i++) {
            	  var colom = [];
            	  for(var j = 0; j < col; j++) {
            	    if (typeof inital == "function") {
            	       colom[j] = inital();
            	    }else {
            	      colom[j] = inital;
            	    }
            	  }
            	  arr[i] = colom;
            	}
            	return arr
            }

            var aaa = (function () {
            	var count = 0;
            	return function () {
            		return count++;
            	}
            })();
            var arr = Array.matrix(5, 5, aaa);
            console.log(arr);