数组-JS

数组对象

new Array(),其实就是第二种创建数组的方式:

var arr1 = new Array();//创建一个空的数组
var arr2 = new Array(2);//创建了一个长度为2的数组,数组元素为空
var arr3 = new Array(2,3);//等价于arr3=[2,3]

检测是否为数组

函数传参,当形参为数组而实参不为数组时,会出现bug,所以需要检测传递过来的参数是否为数组。
注意大小写:

		var arr = [];
        var obj = {};
        //第一种方式:instanceof 运算符 
        console.log(arr instanceof Array);//返回true
        console.log(obj instanceof Array);//返回false

        //第二种方式:Array.isArray(参数); H5新增的方法
        console.log(Array.isArray(arr));//true
        console.log(Array.isArray(obj));//false

增删数组元素

方法名说明返回值
push(参数1…)在数组末尾添加一个或多个元素返回新的长度
pop()删除数组最后一个元素,把数组长度减1返回它删除的最后一个元素的值
unshift(参数1…)在数组的开头添加一个或更多元素返回新的长度
shift()删除数组的第一个元素,数组长度减1返回删除的第一个元素的值
        //push()
        var arr = [1,2,3];
        console.log(arr.push(4,'kalise'));//5
        console.log(arr);
        //unshift()
        console.log(arr.unshift('good'));
        console.log(arr);
        //pop()
        console.log(arr.pop());
        console.log(arr);
        //shift()
        console.log(arr.shift());
        console.log(arr);

在这里插入图片描述
案例:筛选数组
有一个包含工资的数组[1500,1200,2000,2100,1800],要求把数组中工资超过2000的删除,剩余的放到新数组中:

        var arr = [1500,1200,2000,2100,1800];
        var arrNew = [];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<2000){
            	//arrNew[arrNew.length]=arr[i];
                arrNew.push(arr[i]);
            }
        }

splice【可增可删】

splice(开始的下标,删除的长度,新增的元素…)
作用:在数组的任意位置可以实现增删改
返回值:被删除的元素数组
是否影响原数组 是

var arr = [5,6,7,8,9];
//从2号开始后面的都删除
console.log(arr.splice(2))  //[7,8,9]
console.log(arr);  //[5,6]

var arr = [5,6,7,8,9];
//从2号开始(包括2)删除后面的1位,即删除2号位元素
console.log(arr.splice(2,1))  //[7]
console.log(arr);  //[5,6,8,9]

var arr = [5,6,7,8,9];
//删除后新增元素,新增的元素为数组
console.log(arr.splice(2,1,[44,55,66]))  // [7]
console.log(arr);  // [5,6,[44,55,66],8,9]

var arr = [5,6,7,8,9];
//可以新增多个元素,除了[44,55,66]外,true 也是新增的元素
console.log(arr.splice(2,1,[44,55,66],true))  // [7]
console.log(arr);  // [5,6,[44,55,66],true,8,9]

var arr = [5,6,7,8,9];
//从2号开始不删除,直接插入
console.log(arr.splice(2,0,[44,55,66],true))  // []
console.log(arr);  // [5,6,[44,55,66],true,7,8,9]

slice截取

slice(start,end)
作用:截取指定范围的数组元素
返回值:被截取到的新数组
是否影响原数组 否

var arr = [5,6,7,8,9];
//截取时不包含 end 位的元素
console.log(arr.slice(2,4))  // [7,8]
console.log(arr);  // [5,6,7,8,9]

var arr = [5,6,7,8,9];
//从2号开始,后面所有都截取
console.log(arr.slice(2))  // [7,8,9]
console.log(arr);  // [5,6,7,8,9]

var arr = [5,6,7,8,9];
//开始结束颠倒,截取到的为空
console.log(arr.slice(4,2))  // []
console.log(arr);  // [5,6,7,8,9]

var arr = [5,6,7,8,9];
//如果start和end为负值,表示倒数的意思:倒数第4位到倒数第2位
console.log(arr.slice(-4,-2))  // [6,7]
console.log(arr);  // [5,6,7,8,9]

concat拼接

concat(拼接的元素)
作用:将新的元素拼接到指定的数组的后面,形成新的数组(如果拼接的元素中,有数组,则将最外层数组拆开进行拼接)
返回值:拼接后的新数组
是否影响原数组 否

var arr = [5,6,7,8,9]
//注意第三个拼接元素是数组
console.log(arr.concat(-4,-2,[1,[2,3],4],10))  // 5, 6, 7, 8, 9, -4, -2, 1, [2,3], 4, 10
console.log(arr);  // [5,6,7,8,9]

var arr1 = [1,2,3,4]
console.log(arr1.concat(arr))//[1,2,3,4,5,6,7,8,9]

复制数组的方法:

  1. 使用slice复制数组
var arr = [5,6,7,8,9];
var list = [];
function fnCopyArr(arr){
  return arr.slice(0)
}

list = fnCopyArr(arr)
arr[0] = 4;
console.log(arr,list) //[4,6,7,8,9],[5,6,7,8,9]
  1. 使用concat复制数组
var arr = [5,6,7,8,9];
var list = [];
function fnCopyArr(arr){
  return arr.concat()
}
list = fnCopyArr(arr)
arr[0] = 3;
console.log(arr,list) //[3,6,7,8,9],[5,6,7,8,9]

  1. 使用for循环复制数组
var arr = [5,6,7,8,9];

function fnCopyArr(arr){
  var list = [];
  for(var i = 0,len = arr.length; i < len;i++){
    list[i] = arr[i];
  }
  return list;
}
var list1 = fnCopyArr(arr)
arr[0] = 3;
console.log(arr,list1)  //[3,6,7,8,9],[5,6,7,8,9]

或者改用push:

var arr = [5,6,7,8,9];

function fnCopyArr(arr){
  var list = [];
  for(var i = 0,len = arr.length; i < len;i++){
    list.push(arr[i])
  }
  return list;
}
var list1 = fnCopyArr(arr)
arr[0] = 3;
console.log(arr,list1)

数组排序:

方法名说明是否修改原数组
reverse()颠倒数组中元素的顺序会改变原来的数组,返回新数组
sort()对数组的元素按字符串中的编码从小到大排序会改变原来的数组,返回新数组

数组中的数字从大到小排序:

        //翻转数组
        var arr = ['red','blue','yellow'];
        arr.reverse();
        console.log(arr);

        //数组排序
        var arr1 = [12,4,7,34,26,10,8];
        arr1.sort(function(a,b){
            //return a-b;//升序的顺序排序
            return b-a;//降序的顺序排序
        });
        console.log(arr1);

在这里插入图片描述
注意arr.sort(function(a,b){return b-a;});的写法。更多

冒泡排序

假设一个数组有n个数,要求从小到大排:
理解:
从左到右,每两个相邻的数,从前两个数开始依次向右比较,每次的较大者放在右侧,直到最后两个数,从而确定最大的数在最右侧,至此是一轮;在上一轮中确定的数将不再参与比较;以此循环n-1次,确定n-1个数,最后一个数一定是最小的。
确定 i:只需确认n-1个数,i是从0开始的,所以 i<arr.length-1
确定 j:比较前 已经确定的数 的个数为 i,进行比较的是arr[j]arr[j+1],j也是从0开始的,所以 j+1<arr.length-i
在这里插入图片描述

	    var arr=[4,5,1,3,2];
        for(var i=0;i<arr.length-1;i++){
            for(var j=0 ;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    var temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        console.log(arr);

蓝框表示需要比较的两个数;红色表示比较之后的结果;橘色框表示循环后确定的数,粉色表示数组索引号

选择排序

我自己也写了一个排序,本以为是冒泡排序,但从算法来看,这个好像是叫选择排序:

       var arr=[4,5,1,3,2];
        for(var i=0;i<arr.length;i++){
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]>arr[j]){
                    var temp=arr[i]
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        console.log(arr);
 依次取出第一个元素,与后面所有的元素进行比较,符合条件,交换位置
15   6 , 9 , 4 , 2   第一轮
15  9    6 , 4 , 2   第二轮
15  9  6     4 , 2   第三轮
15  9  6  4      2   第四轮

获取数组元素索引

方法名说明返回值
indexOf()在数组中查找给定元素的第一个索引如果存在,返回索引号;如果不存在,返回-1
lastIndexOf()在数组中查找给定元素的最后一个索引如果存在,返回索引号;如果不存在,返回-1
        var arr = ['red','green','blue','pink','blue','black'];//有两个blue
        console.log(arr.lastIndexOf('blue'));
        console.log(arr.indexOf('blue'));
        console.log(arr.indexOf('yellow'));

在这里插入图片描述

数组去重

有一个数组[‘c’,‘a’,‘z’,‘a’,‘x’,‘a’,‘x’,‘c’,‘b’],要求去除重复元素。

        var arr = ['c','a','z','a','x','a','x','c','b'];
        function unique(arr){
            var arrNew = [];
            for(var i=0;i<arr.length;i++){
            	//if(arrNew.indexOf(arr[i])===-1)
                if(i==arr.indexOf(arr[i])){
                    arrNew.push(arr[i]);
                }
            }
            return arrNew;
        }
        console.log(unique(arr));

数组转换为字符串

方法名说明返回值
toString()数组转换成字符串,每一项之间用逗号分隔一个字符串
join(‘分隔符’)数组转换成字符串,每一项之间用输入的 分隔符 分隔一个字符串
        //toString()
        var arr = [1,2,3];
        console.log(arr.toString());//1,2,3
        //join(分隔符)
        var arr1 = ['green','blue','pink'];
        console.log(arr1.join());//green,blue,pink
        console.log(arrr1.join('-'));//green-blue-pink

注:单独把数组部分拿出来便于查找。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值