js数组遍历map,forEach,every,some,filter区别和作用

不管你是一个高级或初级程序员,感觉都应该记录一下自己的学习点滴,也是一个学习过程,以前就是会用从来没总结过,现在有时间来写一下,写的不对的地方可以评论@我。

言归正题,看下面总结:

/*结论:  
             * map:返回一个新数组,原数组不变,遍历数组每一项值,有三个参数item, index, arr
             * forEach:无返回值,若返回则值为undefined,原数组不变,遍历数组每一项值,有三个参数item, index, arr
             * every:返回值是一个布尔值。只有所有元素都具备某项特性后,才会返回true。只要有一项不满足就返回false。
             * some:返回值是一个布尔值true。只要有一个满足,循环就会结束,接下来的数据就不会继续判断
             * filter:过滤数组筛选出符合条件的值,条件为true时的结果。
             * **/

案例如下:

             var log = console.log.bind(console);
            /*所有匿名函数中this都指向window
              //map遍历数组,原数组不变,会返回一个新数组
            var arr = [2, 3, 4, 6, 8, 7];
            var s = '';
            var str = arr.map(function(item, index, arr) {
                log(this); //Window
                log(item); //遍历的每一项值
                log(index); //遍历每一项的下标值
                log(arr); //原数组arr
                s = s + item;
                log(s); //把数组中值拼接成字符串格式
                return item % 2 ==0;
            })
            log(str); //[true, false, true, true, true, false]
            var capitals = ["北京都", "南京都", "广州都", "重庆都", "西安都", "拉萨都"];
            let targets = numbers.map(function(item, index, list) {
                return capitals[item - 1];
            });
            log(targets); // ["北京都", "南京都", "广州都", "重庆都", "西安都", "拉萨都"]
*/

            /*every,它地用武之地在哪里呢?不期望它能对原始数组进行修改。它地定位是考察数组地整体特性。也就是考察数组中所有元素的共性。比如所有元素是否都是奇数,或者所有元素是否都是偶数。它关注的是数组整体元素的共性。
             * 只要有一个不满足,循环就会结束,接下来的数据就不会继续判断。    
            var numbers = [4, 2, 3, 4, 5, 6, 7, 8, 9];
            let bool = numbers.every(function(item, index, list) {
                log(this); ////Window
                log(item); //4,2,3
                log(index); //0,1,2
                log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
                return item % 2 == 0;//false时,结束循环
            });
            log(bool); //false
            */
            //注意:every方法有返回值,返回值是一个布尔值。只有所有元素都具备某项特性后,才会返回true。只要有一项不满足就返回false。

            /*
        //some:它关注的是数组的个性。只要有一个满足,循环就会结束,接下来的数据就不会继续判断。
            var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
            let bool = numbers.some(function(item, index, list) {
                log(item); //返回数组中符合条件的项 1,2
                log(index); //返回数组中符合条件项的下标0,1
                log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
                return item % 2 ==0; //true满足条件循环结束
            });
            log(bool); //true
            */
/*
            //filter:过滤掉不满足条件的选项值。一般数组个数可能会变,数组中值不会变。
            var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
            let bool = numbers.filter(function(item, index, list) {
                log(item); //返回数组中每一项
                log(index); //返回数组中每项的下标
                log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
                return item % 2 == 0; //返回满足条件的数组值,存到一个新的数组中
            });
            log(bool); //[2, 4, 6, 8] 
*/          
           //forEach:遍历每一项数组值,没有返回值
            var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
            let bool = numbers.forEach(function(item, index, list) {
                log(item); //返回数组中每一项
                log(index); //返回数组中每项的下标
                log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
                return item % 2 == 0; //不会返回
            });
            log(bool); //undefined

你可能感兴趣的:(JavaScript)