js数组【续】(相关方法)

一、数组的栈,队列方法【调用这些方法原数组会发生改变
var arr = [2,3,4,5,6];
1.栈 LIFO (Last-In-First-Out)
a、push() 可接受任意类型的参数,将它们逐个添加到数组的末尾。【返回数组的长度

    console.log(arr);  //[2,3,4,5,6]
    console.log(+arr.push(7)); //返回添加数据后数组的长度:6
    console.log(arr);  //[2,3,4,5,6,7]

b、pop() 从数组的末尾移除最后一项,减少数组的length值。【返回移除的项

    console.log(arr.pop()); //取出栈顶元素并返回该栈顶元素值:7
    console.log(arr);  //[2,3,4,5,6]

2.队列 FIFO (First-In-First-Out)
a、shift() 移除数组中的第一个项,同时将数组的长度减一。【返回移除的项

    console.log(arr.shift()); //hello
    console.log(arr); //[2,3,4,5,6]

b、unshift() 在数组的前端添加任意个项。【返回数组的长度

    console.log(arr.unshift('hello')); //6
    console.log(arr); //['hello',2,3,4,5,6]

二、数组的排序方法【reverse()方法、sort()方法】(原数组发生改变)
var arr = [23,56,12,43,6,23,26];
1、reverse()方法:【对数组项进行反转

    console.log(arr);
    //反转 翻转 reverse  改变原数组
    console.log(arr.reverse());
    console.log(arr);

2、sort()方法【数组排序,返回排序后的数组】
a、sort()不带参数默认为升序

    console.log(arr.sort()); //按照字符串ASSIC码形式比较

b、sort()带指定排序函数
函数返回值:
    正值:交换
    负值:不交换

    console.log(arr.sort(com));
    console.log(arr);
    function com(a,b){
        //return a-b;  //升序
        //负数a,b不发生交换 a b  a<b 负值  不交换;  a b  a<b  升序排列
        //正数数a,b不发生交换   a b  a>b 正值  交换;   b  a   b<a  升序排列

        //return b-a;  //降序

        //升
        if(a<=b){
                return -1;  //负数不发生交换
        }else{
                return 1;  //正数发生交换
        }

拓展:【万能比较器

    var stu = [
        {
                name:'zhangsan',
                age:14,
        },
        {
                name:'lisi',
                age:20
        }
    ];


    stu.sort(compare('name','升序'));
    console.log(stu);
    stu.sort(compare('age','降序'));
    console.log(stu);

    //相关调用的比较函数
    function compare(attr,rules){
        return function(o1,o2){
                if(rules === '升序'){
                        if(o1[attr] <= o2[attr]){
                                return -1;
                        }
                        return 1;
                }else{
                        if(o1[attr] >= o2[attr]){
                                return -1;
                        }
                        return 1;
                }
        }
    }
View Code

3、查找最高(最低)的数组值
a.使用sort()方法先进行排序,然后再在排好序的数组中取值
b.使用Math.max.apply()和Math.min.apply()方法

    Math.max.apply(null,array);  //获取array数组中的最大值
    Math.min.apply(null,array);  //获取array数组中的最小值

 

 

三、截取方法:
1、数组拼接:concat()方法 【不改变原数组
先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,返回副本数组
eg:

    var arr = [3,4,5,2,4];
    var arr2 = [1,2,3,4,5];

    var result = arr.concat(arr2);
    console.log(arr);    //[3,4,5,2,4]
    console.log(result);    //[3,4,5,2,4,1,2,3,4,5]

    var result2 = arr.concat('hello');
    console.log(result2);    //[3,4,5,2,4,'hello']

自身定义方法myConcat()来实现concat()

    /*
        concat()方法
        1.不改变原数组,创建副本数组
        2.如果参数是数组,展开放入
        3.如果是其他参数添加到末尾
        4.返回副本
    */
    Array.prototype.myConcat = function(param){
        //创建副本数组
        var array = [];
        for(var i=0;i<this.length;i++){
                array.push(this[i]);
        }
        //判断添加数据类型
        if(Array.isArray(param)){
                for(var j=0;j<param.length;j++){
                        array.push(param[j]);
                }
        }else{
                array.push(param);
        }
        return array;
    };

    var result = arr.myConcat('hello');
    console.log(result);
    var result2 = arr.myConcat([7,8,9,10]);
    console.log(result2);
    console.log(arr);
View Code

2、数组切割:slice()方法 【不改变原数组
slice(返回项的起始位置,结束位置);
一个参数:从该参数指定的位置开始,到当前数组末尾的所有项。
两个参数:起始到结束之间的项,但是不包含结束位置的项
eg:

    //参数是一个为从开始位置截取到末尾;参数是两个的,截取部分为开始位置到结束位置不包括结束位置的值
    //返回截取部分的值,不改变原数组
    var arr = [123,34,5,67,3,6,8];
    var result = arr.slice(2);
    console.log(result);  //[5,67,3,6,8]
    console.log(arr);  //[123,34,5,67,3,6,8]

    var result2 = arr.slice(2,4);
    console.log(result2); //[5,67]

3、splice() 【改变原数组
向数组的中部插入数据将始终返回一个数组,该数组中包含从原始数组中删除的项。
删除:指定一个参数(删除的开始的位置)【删除该参数索引及后面的所有元素】;指定两个参数(删除的起始位置,要删除的项数) 【返回删除的元素组成的数组
插入:指定三个参数(起始位置,0,要插入的项任意数量的项)
替换:指定三个参数(起始位置,要删除的项数,要插入的任意数量的项)
eg:

    //删除
    var arr = [32,4,9,3,0];
    var result = arr.splice(1,3);
    console.log(result);  //[4,9,3]
    console.log(arr); //[32,0]

    //插入
   var arr = [32,4,9,3,0];
arr.splice(1,0,'hello','sss'); console.log(arr); //[32,'hello','sss',4,9,3,0] //替换 //从索引位置为1的删除两项后在开始位置处再插入一些元素
   var arr = [32,4,9,3,0];
arr.splice(1,2,1,2); console.log(arr); //[32,1,2,3,0]

四、索引方法
indexOf lastindexOf 返回索引或-1
var arr = [2,5,67,'2',3,2,45];
1、indexOf()
从数组开头向后查找,使用全等操作符,找不到该元素返回-1
参数:第一个参数为要查找的项,第二个参数(可选)为索引开始位置

    //参数:要查找的元素   开始查找的位置
    console.log(arr.indexOf(2)); //0
    console.log(arr.indexOf(2,1)); //5
    console.log(arr.indexOf(22)); //-1

2、lastIndexOf()
从数组末尾向前查找,使用全等操作符,找不到该元素返回-1
参数:第一个参数为要查找的项,第二个参数(可选)为索引开始位置

    console.log(arr.lastIndexOf(2));  //5
    console.log(arr.lastIndexOf(2,3)); //0

3.常用于判断数组中是否含有该元素

    if(arr.indexOf(2) != -1){ }

五、迭代方法
参数: 每一项上运行的函数,运行该函数的作用域对象(可选)
1、every()
对数组中的每一运行给定的函数参数,如果该参数函数对每一项都返回true,则该函数返回true
eg:

    var arr = [23,45,1,4,3,45,7];
    var result = arr.every(function(item,index,arr){
        console.log(this); //{}
        return item>20;
    },{});
    console.log(result); //false

自己定义myEvery()方法来实现every()方法:
eg:

    var arr = [23,45,1,4,3,45,7];

    Array.prototype.myEvery = function(fun,funThis){
        //var result;
        for(var i=0;i<this.length;i++){
                var result = fun.call(funThis,this[i],i,this);
                if(!result){
                        //break;
                        return result;
                }
        }
        return result;
    };

    var result = arr.myEvery(function(item,index,arr){
        console.log(this); //{}
        return item>20;
    },{});
    console.log(result); //false
View Code

2、some(),3、filter(),4、map()使用的数组如下:
var stus = [
        {
                name:'zhangsan',
                age:20
        },{
                name:'lisi',
                age:13
        },{
                name:'wangwu',
                age:12
        }
];
2、some()
对数组中的每一运行给定的函数,如果该函数对任一项都返回true,则返回true
eg:

    //判断是否有未成年人,有返回true,否则返回:false
    var result = stus.some(function(item,index,arr){
         return item.age<18
    });
    console.log(result); //true

3、filter()
对数组中的每一运行给定的函数,会返回满足该函数的项组成的数组
eg:

    //filter
    //过滤出来所有成年人
    var result = stus.filter(function(item,index,arr){
        return item.age>18;
    });
    console.log(result);

    //查找所有未成年人的名字
    //先过滤出所有未成年人再映射出符合条件人名字
    var result = stus.filter(function(item,index,arr){
        return item.age<18;
    }).map(function(item,index,arr){
        return item.name;
    });
    console.log(result);

4、map()
对数组中的每一元素运行给定的函数,返回每次函数调用的结果组成的数组

    //map
    //查找处所有人的名字,返回数组
    var result = stus.map(function(item,index,arr){
        return item.name;
    });
    console.log(result);
    var result = stus.map(function(item,index,arr){
        return item.age*2;
    });
    console.log(result);

5、forEach()
对数组中的每一元素运行给定的函数,没有返回值,常用来遍历元素

    //数组的遍历
    var arr = [{
        name:'zhangsan'
    },{
        name:'lisi'
    },{
        name:'terry'
    }];
    //向数组各元素对象中添加age属性
    var ageInit = 10;
    arr.forEach(function(item,index,arr){
        item.age = ageInit++;
    });
    console.log(arr);

 

posted @ 2019-07-15 20:58  nzc  阅读(301)  评论(0编辑  收藏  举报