JavaScript之数组

177 阅读2分钟

创建数组

  • var 数组名 = new Array();

也可以指定初始化数组长度new Array(3); 创建了一个长度为3 的数组, 多个数逗号隔开则类似于字面量创建 如new Array(2,3,4);创建了一个[2,3,4]数组

  • var 数组名 = []; (字面量创建)

初始化:

var arr = [1,2,'xxx',true] 可以存放任意数据类型 输出arr[4] 打印 undefined


添加数组元素

  • arr.push('xxx'); 可以有多个元素 如 arr.push.('1',3,true,'xxx')

    从数组最后面追加元素,且这个方法的返回值是 添加元素之后数组的长度

  var array = ['red','green','blue','pink']
        array.length = 6	// 直接修改长度,多出的没赋值的元素 为 empty
        console.log(array);	
        console.log(array[4]);	// 没赋值的empty元素 打印输出为undefined
        array.push('skyblue')	// 在最后一个元素empty之后加入进去
        console.log(array);
        array.push(12)		// 可以添加任何类型的数据
        console.log(array);        
        array.push(true)
        console.log(array);
        array[10] = 'test'
        console.log(array);

结果: 在这里插入图片描述

  • arr.unshift('xxx')
    在数组最前面加入元素,也可以添加多个,返回值是添加元素之后数组的长度

  • arr.splice arr.splice(0,0,数据) 从下标0添加一条数据,相当于从前面加。


删除数组元素

  • arr.pop() 没有参数,可以删除数组的最后一个元素(一次只能删除一个),返回值是删除的那个元素值

  • arr.shift() 没有参数,删除数组的第一个元素,返回值是删除的那个元素值

  • arr.splice(开始下标,删除多少个) 从开始下标删除指定个数的数据,因为第三个参数为空,相当于把指定下标和后面几个都替换成空,所以就相当于删除


排序

冒泡排序

     var array = [2,0,6,1,77,0,52,0,25,7]
     for (let i = 0; i < array.length-1; i++) {//最后一趟是没运行排序的,所以要-1
         for (let j = 0; j < array.length-1-i; j++) {	
             if (array[j]>array[j+1]) {// 从小到大排序。 如果是 < ,则是从大到小排序
                 var t = array[j]
                 array[j] = array[j+1]
                 array[j+1] = t
             }
         }            
     }

趟数和比较次数是相反的,前面几趟比较次数多,后面几趟比较次数少

JS提供的数组排序方法sort()

array.sort(); 默认排序的是字符串!

array.sort(function(a,b){	
/*a, b 表示数组中的一项,如果是数值,直接a b 相减计算可以,但是如果array数组中的每项都是对象,
则a和b分别是数组里面的对象,要按对象中的数值排序应该写成 a.数值属性 - b.数值属性 */
	//	return a - b ;	数值升序
	return b - a ;	// 数值降序 
});

检验是否为数组

  • 用instanceof

数组名xxx instanceof Array ; 如果是数组,返回true,否则返回false

  • Array.isArray( 数组名xxx )

如果是数组,返回true,否则false


转换为字符串

array.toString(); 控制台打印输出的结果变成一个没有 [ ] 包裹的黑色字体字符串

array.join(' 指定分割字符 '); 可以用指定字符分割每个元素,最终转换为字符串


其他api

方法名说明返回值
concat()连接两个或多个数组,不影响原数组返回一个新的数组
slice()数组截取slice(begin,end)返回被截取项目的新数组

filter

数组.filter((数组的每一项)=>{

​	return  数组每一项经过一些比较/运算,得到的布尔值如果为true则保留这一项,false则删除这一项 

})

可简写为如下箭头函数

数组.filter( 数组的每一项 =>{ ...运算(结果是布尔值)... })

filter函数所返回的结果是一个新的数组不影响调用这个函数的原数组,所有可以把结果赋值给原数组达到修改原数组的效果

reduce

数组.reduce((pre,数组每一项)=>{

​	return  数组每一项去运算	// 这里数组有多少项就循环执行多少次。pre是上一次循环执行后的返回值

},0)	// 这个0是pre的初始值

reduce一般用于做统计