数组对象中生动详细的javascript
前言Javascript中的数组对象,我们经常说,是一个数组对象,主要用于封装多个任意类型的数据并对它们进行管理。
所有主流浏览器都支持数组对象。
每个人都知道数组实例具有这四种方法:推、流行、移位、不位移。大家都知道推+流行实现栈,和Shift +推动实现队列。没有讨论的高级职位,先进先出。
但其中的一个问题将被用在这些方面。
主题
螺旋矩阵这个术语可能是背景语言所熟悉的,是一个二维数组。名词的特点是什么请看下面的图片。
上面是一个从外到内的螺旋矩阵,他的排列规则是从外围、圆周和圈里面,就像一条盘旋的蛇。
分析及解决方案
进入今年九月,腾讯学校招在线笔问题存在螺旋矩阵问题,给定传入的数字N,打印出螺旋矩阵N,然后菜鸟没有出来,在电脑上了解时间后突然发现秘密。
虽然作者没有在代码的时间记录,但我首先定义一个二维数组的n×n,绕过需要几层,如上面是2,然后循环几次在四周期,下降了要插入的内容的二维数组的定义,具体的代码没有法律,不管怎样,愚蠢的方式,但这不是本文的重点,本章下面进入主题:
前几天,我在codewars做练习,我遇到了一个螺旋矩阵问题。它要求编写一个函数,给出一个矩阵的二维数组参数,返回一个数组,数组的元素序列是螺旋矩阵的路径。
例如:
功能getlinear(螺旋){
做一些操作…
}
var arr = {
{1,2,3},
{ 4,5,6 },
{ 7,8,9 }
}
getlinear(ARR) / /返回1,2,3,6,9,8,7,4,5 } {
上面的例子表明getlinear函数是一维数组的输入螺旋矩阵输出。(我不知道该怎么说。不管怎样,它是一个二维数组,像蛇一样绕成一个一维数组)。
当我看到问题的第一时间,我想到了腾讯的问题,而博客写的与四个类似的循环和提交它。这个网站的功能就是你可以看到别人的代码,当你做完试题,博主小心打开答案,列表的哇,首先是深深的吸引了我。虽然我不记得的源代码,但它是这样的。
功能getlinear(螺旋){
VaR的项目;
var线性= { }
而(项目= spiral.shift()){
线性= linear.concat(项目)
对/对
对于(var i = 0;i < spiral.length;i++){
Linear.push(螺旋{我},pop())
}
下/
线性= linear.concat(spiral.pop()。反()))
左/左
对于(var i = spiral.length - 1;我> = 0;I){
Linear.push(螺旋{我}。移())
}
}
线性回归
}
对于菜鸟级的我,刚开始有点懵了,因为我想,看了一会发现这个秘密的。这比我写的好得多。此代码不需要考虑传入数组是否是n×n数组,并且他可以解析任何数组,如2×3数组等。
而且代码对于一个特定的基础是绝对简单和容易理解的。
如果你有点困惑,往下看,我的图解说明
线性= linear.concat(项目)
项是二维数组的第一个元素,第一个数组,它删除数组并返回,如下所示:
在这行代码之后,原始数组如下所示:
接下来,我们需要向要返回的数组添加567,也就是说,二维数组的每个数组元素的最后一个元素。我们可以从流行音乐中得到它。
对/对
对于(var i = 0;i < spiral.length;i++){
Linear.push(螺旋{我},pop())
}
然后原始的二维数组如下所示:
然后我们得到最后一行1098,然后反转,二维数组的最后一个数组弹出,然后反向就可以了。
下/
线性= linear.concat(spiral.pop()。反()))
此时,二维数组是相同的。
向左走和右边是一样的,只不过是把它变为转变:
左/左
对于(var i = spiral.length - 1;我> = 0;I){
Linear.push(螺旋{我}。移())
}
原来的二维数组更改为:
此时,一个圆结束,然后决定是否进入下一个圆。
总结
好的,本文的内容在这里。在数组的灵活性下,一个看似简单的话题是如此简单。希望这篇文章能对JS新手有所帮助。如果有任何疑问,你可以留言。