数组螺旋输出

本文介绍了如何使用JavaScript实现数组的螺旋输出,分享了一段满意的功能代码,并提供了测试数据及结果。文章强调了函数的单一化设计思路,无参考来源,最后作者幽默地提及个人生活琐事。
摘要由CSDN通过智能技术生成

前言

看过我前几篇博客的朋友应该有体会,博主是个逗逼+沙雕+中二(重度患者),那时候假酒喝多了,大家见谅。

今天帮朋友用JS写了一个数组螺旋输出的代码实现,写完之后我自己很满意,抱着“独乐乐不如众乐乐”的思想,贴出来和大家分享分享,也算是为开源社区做了丁丁大点的贡献了。

代码

// 20191221
// 螺旋输出数组
function rotate(n) {
	var down = 1
	var up = 2
	var left = 3
	var right = 4
	
	function goRight(x, y, lap) {
		// 可继续向右
		if (y + 1 < n - lap) {
			return {
				"end": false, 
				"x": x,
				"y": y + 1,
				"d": right,
				"lap": lap,
			}
		}
		return goDown(x, y, lap)
	}
	
	function goDown(x, y, lap) {
		// 可继续向下
		if (x + 1 < n - lap) {
			return {
				"end": false, 
				"x": x + 1,
				"y": y,
				"d": down,
				"lap": lap,
			}
		}
		return goLeft(x, y, lap)
	}
	
	function goLeft(x, y, lap) {
		// 可继续向左
		if (y > lap) {
			return {
				"end": false, 
				"x": x,
				"y": y - 1,
				"d": left,
				"lap": lap,
			}
		}
		return goUp(x, y, lap)
	}
	
	
	function goUp(x, y, lap) {
		// 可继续向上
		if (x - 1 > lap) {
			return {
				"end": false, 
				"x": x - 1,
				"y": y,
				"d": up,
				"lap": lap,
			}
		} else if (x - 1 == lap && y + 1 < n - (lap + 1)) {	// 结束了一圈,只能向右边看看,看是否存在下一圈
			return {
				"end": false, 
				"x": x,
				"y": y + 1,
				"d": right,
				"lap": lap + 1,
			}
		} 
		return {"end": true}
	}
	
	
	function getNext(x, y, d, lap) {
		switch(d) {
			case down:return goDown(x, y, lap)
			case up: return goUp(x, y, lap)
			case left: return goLeft(x, y, lap)
			case right: return goRight(x, y, lap)
		}
	}
	
	if (n > 0) {
		var i = 0
		var arr = new Array()
		var cur = {
			"end": false,
			"x": 0,
			"y": 0,
			"d": right,
			"lap": 0
		}
		while (!cur.end) {
			arr[i++] = "(" +  cur.x + ", " + cur.y + ")"
			cur = getNext(cur.x, cur.y, cur.d, cur.lap)
		}
		return arr
	}
	return new Array()
}

测试数据&结果

矩阵
(00) (01) (02) (03) (04) (05)
(10) (11) (12) (13) (14) (15)
(20) (21) (22) (23) (24) (25)
(30) (31) (32) (33) (34) (35)
(40) (41) (42) (43) (44) (45)
(50) (51) (52) (53) (54) (55)

n = 1
["(0, 0)"]
n = 2
["(0, 0)", "(0, 1)", "(1, 1)", "(1, 0)"]
n = 3
["(0, 0)", "(0, 1)", "(0, 2)", "(1, 2)", "(2, 2)", "(2, 1)", "(2, 0)", "(1, 0)", "(1, 1)"]
n = 4
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(1, 3)", "(2, 3)", "(3, 3)", "(3, 2)", "(3, 1)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(2, 2)", "(2, 1)"]
n = 5
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(0, 4)", "(1, 4)", "(2, 4)", "(3, 4)", "(4, 4)", "(4, 3)", "(4, 2)", "(4, 1)", "(4, 0)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(1, 3)", "(2, 3)", "(3, 3)", "(3, 2)", "(3, 1)", "(2, 1)", "(2, 2)"]
n = 6
["(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(0, 4)", "(0, 5)", "(1, 5)", "(2, 5)", "(3, 5)", "(4, 5)", "(5, 5)", "(5, 4)", "(5, 3)", "(5, 2)", "(5, 1)", "(5, 0)", "(4, 0)", "(3, 0)", "(2, 0)", "(1, 0)", "(1, 1)", "(1, 2)", "(1, 3)", "(1, 4)", "(2, 4)", "(3, 4)", "(4, 4)", "(4, 3)", "(4, 2)", "(4, 1)", "(3, 1)", "(2, 1)", "(2, 2)", "(2, 3)", "(3, 3)", "(3, 2)"]


大致思路

1、类似于迭代,根据当前位置定位下一个位置。
2、函数功能单一化,比如左看右看上看下看。

参考

无参考

写在后面的话

最近国家查得严,我又失恋了,上一个对象有点漏气。。。
最近我妈喊得严,三天两头喊我找对象,有带有闺蜜的女孩纸看到这个博客吗?我想请你吃饭(疯狂眨眼暗示)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值