当前位置: 首页 > Web前端 > JavaScript

阵列

时间:2023-03-27 18:05:20 JavaScript

数组什么是数组?字面理解就是数字的组合其实不是很准确。准确的说,数组就是一个数据的集合,就是我们把一些数据放在一个盒子里面,按照顺序排列[1,2,3,'hello',true,false]这个东西就是一个数组,里面存放的是一些数据集合数据类型分类number/string/boolean/undefined/null/object/function/array/...array也是数据类型之一。我们简单的把所有的数据类型分为两大类:基本数据类型和复杂数据类型基本数据类型:number/string/boolean/undefined/null复杂数据类型:object/function/array/...创建数组array是一个[]in[]里面存放着各种数据,字面量按顺序排列,创建一个数组。直接使用[]创建数组//创建一个空数组vararr1=[]//创建一个有内容的数组vararr2=[1,2,3]内置构造函数创建数组使用js内置构造函数Array创建一个数组//创建一个空数组vararr1=newArray()//创建一个长度为10的数组vararr2=newArray(10)//创建一个包含内容的数组vararr3=newArray(1,2,3)数组length的长度:length表示length表示数组的长度,数组有多少个成员,length是个数//创建数组vararr=[1,2,3]console.log(arr.length)//3数组的index索引,也叫下标,指的是一个数据在数组中的位置注意:在所有语言中,index都是从0开始的。在js中也是,数组的index从0开始//创建一个数组vararr=['hello','world']在上面的数组中,第0个数据是字符串hello,第一个数据是字符串world。如果要获取数组中的数字,使用数组[index]获取即可。vararr=['你好','世界']控制台.log(arr[0])//helloconsole.log(arr[1])//世界数据类型之间的存储区别(重点)既然我们区分了基本数据类型和复杂数据类型,那么它们肯定是有一些区别的它们之间。最大的不同是存储的不同。我们的存储空间分为栈和栈两种:主要存储基本数据类型的内容堆:主要存储复杂数据类型的内容基本数据类型在内存中的存储情况varnum=100,在内存中的存储直接存放在栈空间,复杂的数据类型存放在内存中。下面对象的存储是varobj={name:'Jack',age:18,gender:'复杂数据类型的存储在堆中开辟一块存储空间,数据存储在存储空间中,并将存储空间的地址赋值给栈中的变量。这就是数据类型的区别和数据类型之间的比较。基本数据类型是值之间的比较varnum=1varstr='1'console.log(num==str)//真正的复杂数据类型是地址之间的比较varobj={name:'Jack'}varobj2={name:'Jack'}console.log(obj==obj2)//false因为我们创建了两个对象,所以会在堆空间开辟两个存储空间来存储数据(两个地址)虽然存储的内容是一样,所以也有两个存储空间,两个地址复杂数据类型的地址比较,所以obj和obj2这两个变量的地址是不一样的,所以我们得到的是假数组Array的常用方法是a复杂的数据类型,当我们操作它的时候,就不能再像基本数据类型那样操作了。比如我们要改变一个数组//创建一个数组vararr=[1,2,3]//我们要将数组变成只有1和2arr=[1,2]这肯定是不合理的,因为这个之前不改变数组,相当于新建一个数组,赋给变量arr,相当于改变了arr存放的地址,也就是把存放空间换了,在之前的空间没有修改,所以我们需要使用一些方法在不改变存储空间的情况下改变存储空间中的数据。数组常用的方法是pushpush,用于在数组末尾追加。一个元素vararr=[1,2,3]//使用push方法在末尾添加一个元素arr.push(4)console.log(arr)//[1,2,3,4]poppop常用的方法是删除数组末尾的一个元素vararr=[1,2,3]//使用pop方法删除末尾的一个元素arr.pop()console.log(arr)//[1,2]unshiftunshift常用的方法是添加一个elementatthefrontofthearrayvararr=[1,2,3]//使用unshift方法在??数组前面添加一个元素arr.unshift(4)console.log(arr)//[4,1,2,3]数组shiftshift常用方法删除数组首元素vararr=[1,2,3]//使用shift方法删除数组首元素arr.shift()console.log(arr)//[2,3]数组的常用方法之一splicesplice截取数组中的一些内容,根据数组的索引截取语法:splice(从哪个索引位置开始,多少个拦截,替换新元素)(第三个参数可以不写)vararr=[1,2,3,4,5]//使用splice方法截取数组arr.splice(1,2)console.log(arr)//[1,4,5]arr.splice(1,2)表示从索引1开始tointercept2contents第三个参数不写,即没有新的内容替换截取位置vararr=[1,2,3,4,5]//使用拼接的方式截取数组arr。splice(1,2,'我是新内容')console.log(arr)//[1,'我是新内容',4,5]arr.splice(1,2,'我是新内容')意思是从index12开始截取内容,然后用第三个参数填充数组空出的位置。常用方法reversereverse用于反转数组。vararr=[1,2,3]//使用reverse方法对数组进行反转arr.reverse()console.log(arr)//[3,2,1]数组常用的排序方法用于对数组排序orderedvararr=[2,3,1]//使用sort方法对数组进行排序arr.sort()console.log(arr)//[1,2,3]这只是一个基本的简单用法数组常用methodconcatconcat就是拼接多个数组。与前面的方法有些区别,就是concat不会改变原来的数组,而是返回一个新的数组vararr=[1,2,3]//使用concat方法连接数组varnewArr=arr.concat([4,5,6])console.log(arr)//[1,2,3]console.log(newArr)//[1,2,3,4,5,6]注意:concat方法将不改变原来的数组。joinjoin常用的方法是把数组中的每一项都链接起来,变成一个字符串。可以定义每个item之间的内容链接join(用什么内容链接)不会改变原来的数组,而是返回链接字符串vararr=[1,2,3]//使用join来链接数组varstr=arr.join('-')console.log(arr)//[1,2,3]console.log(str)//1-2-3注意:join方法不会改变原数组,但是返回链接字符串for和forin循环,因为数组的索引然后你可以得到数组的内容。数组的索引按照0到n的顺序排列。我们可以使用for循环来循环数组,因为for循环也可以设置为按照0到n的顺序递增。我们称这种行为为遍历vararr=[1,2,3,4,5]//使用for循环遍历数组for(vari=0;iarr[i+1]){vartmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp}}//遍历后数组会变成[1,3,5,4,6,7,2,8,9]第一个结束后,数组的最后一个,就是最大的数字然后我们多次执行上面的代码。数组有多少项就执行多少次根据数组的长度遍历多少次for(varj=0;jarr[i+1]){vartmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp}}}//结束后对数组进行排序,进行一些优化想象一道题,假设数组的长度为9,在第八行之后,接下来的八个数已经按顺序排好了,剩下的最小的一定在最前面,那么第九次就没有意义了,因为最小的是已经在最前面了,不会再有位置变化,所以不需要第九次遍历,可以减少一次for(varj=0;jarr[i+1]){vartmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp}}}第二题,第一次,把largestnumberattheend然后第二次,其实不需要比较倒数第二和最后一个,因为我们只是想把倒数第二个放在倒数第二的位置,即使比较也不会改变positionforthirdtime需要比较倒数第三个数和倒数第二个数,以此类推。其实每次遍历都是遍历当前的次数-1for(varj=0;jarr[i+1]){vartmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp}}至此,一个冒泡排序就完成了。选择排序首先假设数组中的第0个是最小数的索引,然后遍历数组。只要有比我小的数,然后替换之前记录的索引,直到数组遍历结束,就可以找到最小的索引,然后把最小的索引改到第0位进行第二次遍历,假设first是最小数的索引,你是遍历一次数组,找到比我小的数索引遍历后,换位置等等。也可以对数组进行排序,准备一个数组vararr=[3,1,5,6,4,9,7,2,8]假设数组中第0个数是最小的数索引varminIndex=0遍历数组,判断,只要比我小的数,就替换原来记录的索引varminIndex=0for(vari=0;i