JS数组转为二维数组

  弄了个工具, 数组转为二位数组. 先看代码:

/**
 * 一维数组格式化为二维数组
 * @param arr 原数组
 * @param num 数组个数,默认2个.
 * @param direction 元素存放的方向,{1:按行存,0:按列存}, 默认0
 * @returns {Array}
 */
formatArray (arr,num=2,direction) {
	let leg = arr.length;
	direction = +!!direction
	let newArray = [];
	let leg2 = Math.ceil(leg/num);
	for (let i = 0; i < num; i++) {
		newArray.push([]);
	}
	let tmp = direction?leg2:num;
	let calc = [function (a,b) { 
			return a/b|0; 
		},
		function (a,b) { 
			return a%b; 
		}
	];
	let calcX = calc[direction];
	let calcY = calc[+!direction];
	for(let i =0; i<leg; i++) {
		newArray[calcY(i,tmp)][calcX(i,tmp)] = arr[i];
	}
	return newArray;
}

  整体思路就是根据取模的周期性和取整的周期递增性为二维数组填值. 写完之后, 发现自己真棒 (Real Water)! 然后给自己准备了一条测试数据:

arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];

  默认值测试结果:
JS数组转为二维数组_第1张图片
  看起来不错. 然后传入可能的参数测试, 比如3:
JS数组转为二维数组_第2张图片
  一切都按照预期发展. 一直测试到7, 奇怪的事情发生了:
JS数组转为二维数组_第3张图片
客官们一定都发现了, 按行时, 最后一行没有元素. 怎么肥事?! 仔细对比了数据, 发现有些行应该是3个元素结果是4个, 导致最后一行本来有3个元素的反而一个也没有.
  思来想去(挠来挠去)也没什么好办法, 只好放在这里了…
  好像这些东西没什么用啊…我绝不承认这是在写BUG…
  算了

你可能感兴趣的:(学而思,js,javascript,算法)