数组的迭代方法及其常用实例

  1. some
  2. every
  3. filter
  4. map
  5. forEach        不能被return或break终止循环
  6. reduce       累加器

1、some

语法:数组.some(function(item){return 判断表达式

})

函数有返回值返回一个booleean值,当数组中有一个满足条件的就返回true 若一个没有则返回false,可以用一个变量来接收返回值

演示

        var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        var flag = arr.some(function(item) {
            return item > 10;
        })
        console.log(flag); //flag==true
        var flag1 = arr.some(function(item) {
            return item > 100;
        })
        console.log(flag1);//flag=false

es6语法

 let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        let flag = arr.some(item=>item>0)
        console.log(flag); //flag==true
        let flag1 = arr.some(item=>item > 10)
        console.log(flag1);//flag=false

实例


       //问:是否有不及格的?
          var  scores=[60,23,4,90,99]
          var rst=scores.some(function (value, index) {
          return value < 60
        })
        console.log(rst);

2、every

 语法:数组.every(function(item){return 判断表达式

})

函数有返回值返回一个booleean值,当数组中每一个都满足条件的就返回true 若有一个不满足则返回false,可以用一个变量来接收返回值。

演示

        var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        var flag = arr.every(function(item) {
            return item>0;
        })
        console.log(flag); //flag==true
        var flag1 = arr.every(function(item) {
            return item > 10;
        })
        console.log(flag1);//flag=false

es6语法

        let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        let flag = arr.every(item=>item>0)
        console.log(flag); //flag==true
        let flag1 = arr.every (item=>item > 10)
        console.log(flag1);//flag=false

实例

       问:是否都及格了? 
        var  scores=[60,23,4,90,99]
        var rst=scores.every(function(item){
            return item>=60     //假      
         })

3、filter

 语法:数组.filter(function(item){return 判断表达式

})

函数有返回值返回一个新数组, 过滤 筛选所有满足条件的数据,组成新数组 返回一个新数组,可以定义一个新数组来接收

演示

        var arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        var arr0 = arr.filter(function(item) {
            return item > 10;
        })
        console.log(arr0); //arr0=[21, 21, 412]

es6语法

        let arr = [1, 21, 21, 3, 1, 412, 4, 1, ];
        let arr0 = arr.filter(item => item > 10)
        console.log(arr0); //arr0=[21, 21, 412]

实例

        //筛选出大于60的数据
        var arr0=arr.filter(function (item, index) {
            console.log(item,index);
            return item >= 60
        })

         console.log(arr0);

4、map

map 对原数组数据进行处理之后,返回新数组,可以用一个新数组接收,、

主要用途:可以处理一些需要统一改变的数据,新增属性,删除属性,修改数据等。

语法:数组.map(function(item){

return item+5;})

演示

        var arr = [1, 1, 3, 3, 21, 4, 1, 2, 5, 23, 25]
        var arr1 = arr.map(function(item) {
            return item + 5;
        })
        console.log(arr1); //arr1=[6, 6, 8, 8, 26, 9, 6, 7, 10, 28, 30]

es6语法

        let arr = [1, 1, 3, 3, 21, 4, 1, 2, 5, 23, 25];
        let arr1 = arr.map(item => item + 5);
        console.log(arr1); //arr1=[6, 6, 8, 8, 26, 9, 6, 7, 10, 28, 30]

实例

1数据统一新增属性    

            var datas = [
            { no: 1001, name: "狗蛋", age: 20 },
            { no: 1002, name: "吕布", age: 33 },
            { no: 1003, name: "蔡文姬", age: 18 },
            { no: 1004, name: "钢炮", age: 50 }
        ]
​
        // var data=datas.map(function(item){
        //     item.age=item.age-2
        //     return item
        // })
        var data = datas.map(function (item) {
            item.sex = 0      //新增属性
            return item
        })
​
        console.log(data);
        //data= {no: 1001, name: '狗蛋', age: 20, sex: 0}
        //, {no: 1002, name: '吕布', age: 33, sex: 0}
        //, {no: 1003, name: '蔡文姬', age: 18, sex: 0}
        //, {no: 1004, name: '钢炮', age: 50, sex: 0}

2数据统一删除属性

 var  datas = [
            { no: 1001, name: "狗蛋", age: 20 },
            { no: 1002, name: "吕布", age: 33 },
            { no: 1003, name: "蔡文姬", age: 18 },
            { no: 1004, name: "钢炮", age: 50 }
        ]
        var  data = datas.map(function(item) {
            delete(item.no) //新增属性
            console.log();
            return item
        })
​
        console.log(data);
        //  data= [ {name: '狗蛋', age: 20}
        //,{name: '吕布', age: 33}
        //,{name: '蔡文姬', age: 18}
        //,{name: '钢炮', age: 50}]

3数据统一修改属性 

  var datas = [
            { no: 1001, name: "狗蛋", age: 20 },
            { no: 1002, name: "吕布", age: 33 },
            { no: 1003, name: "蔡文姬", age: 18 },
            { no: 1004, name: "钢炮", age: 50 }
        ]
​
        var data = datas.map(function (item) {
            item.age = item.aga-5    
            return item
        })
​
        console.log(data);
        //data= {no: 1001, name: '狗蛋', age: 15}
        //, {no: 1002, name: '吕布', age: 28}
        //, {no: 1003, name: '蔡文姬', age: 13}
        //, {no: 1004, name: '钢炮', age: 45}

5、forEach

foreac遍历数组中的每一个数据,没有返回值,并且不能被return终止;

一般用途:遍历数据

语法:数组.forEach(function(item,index,arr){})

item:数组中的每一项

index:每一项的索引

arr:数组本身

演示

        var arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
        arr.forEach(function(item, index, arr) {
            console.log(item);//数组每一项
            console.log(index);//数组每一项的索引
            console.log(arr);//数组本身

        })

es6语法

        let arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
        arr.forEach((item, index, arr)=> {
            console.log(item);//数组每一项
            console.log(index);//数组每一项的索引
            console.log(arr);//数组本身

        }) 

reduce

redude 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值

一般用途:数据累加,数组合并,数组去重,数据累乘,累除

语法 数组.reduce(function(a,b){},c)

a:第一次是c的值,若,没有则是数组的第一个数据 第二次之后,a的值,是前面数据累加的和

b数组中的每一项

c a第一次执行的默认值

演示

         var arr = [10, 20, 20, 30, 10, 100]
         var sum = arr.reduce(function (a, b) {        //a第一次是数组中第一个数组,b是第二个数据
            console.log(a, b);                         //第二次之后,a的值,是前面数据累加的和
         return a + b
       })
          var sum = arr.reduce(function (a, b) {        //a第一次是数组中第一个数组,b是第二个数据
             console.log(a, b);                         //第二次之后,a的值,是前面数据累减的和
          return a - b
         },2000)
          console.log(sum);
         var sum = arr.reduce(function (a, b) {        //a第一次是数组中第一个数组,b是第二个数据
           console.log(a, b);                         //第二次之后,a的值,是前面数据累乘的和
            return a * b
         })
            console.log(sum);
         var sum = arr.reduce(function (a, b) {        //a第一次是数组中第一个数组,b是第二个数据
            console.log(a, b);                         //第二次之后,a的值,是前面数据累除的和
            return a / b
         },1)
         console.log(sum);

es6语法

        let arr = [10, 20, 20, 30, 10, 100]
        let sum = arr.reduce((a, b) => a + b, 0)
        console.log(sum);
        let arr = [10, 20, 20, 30, 10, 100]
        let sum = arr.reduce((a, b) => a - b, 0)
        console.log(sum);
        let arr = [10, 20, 20, 30, 10, 100]
        let sum = arr.reduce((a, b) => a * b, 1)
        console.log(sum);
        let arr = [10, 20, 20, 30, 10, 100]
        let sum = arr.reduce((a, b) => a/ b, 1)
        console.log(sum);
      
        

实例

1 将数组改造为一维数组

       
         var arr = [[10, 20, 30], ['hello'], [50, 100], [40], [70, 11, 22]]
        //将数组改造为一维数组
        var arrx = arr.reduce(function (a, b) {
            return a.concat(b)
        })
        arr= [10, 20, 30, 'hello', 50, 100, 40, 70, 11, 22]

2数组去重

        var arr = [10, 20, 30, 10, 10, 20, 20, 100, 3200];
        var arr0 = []
        var obj = arr.reduce(function(pre, cur, index) {
            //pre 对象
            //cur 对象属性
            //索引
            if (!(cur in pre)) {//判断对象中是否有该属性
                arr0.push(cur)//若没有则向数组中添加
            }
            pre[cur] = ''//对象中追加属性
            return pre
        }, {})
        console.log(arr0);
​

3.统计字符串中字符的个数

        var arr = str.split('');
        var obj = arr.reduce(function (pre, cur) {
            if (cur in pre) {   //判断对象pre中是否包含cur属性
                pre[cur]++  // pre.a
            } else {
                pre[cur] = 1
            }
            return pre
        }, {})//pre的默认值为{}
        console.log(obj);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值