数组对象中生动详细的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新手有所帮助。如果有任何疑问,你可以留言。