三、数组迭代方法

169 阅读4分钟

ES6新增的数组迭代方法

一、数据类型Set(集合),

他类似于数组,但不是数组,与数组的唯一的区别是:不能存储重复元素 他最大的应用场景就是数组去重

  //let arr=[10,22,22,13,13,45,66,82,11,17,17]
      
       // let set =new Set(arr)
        //  
        //let newArr=Array.from(set) 
        console.log(set);
        console.log(newArr);
 简写:
  let newArr=Array.from(new Set(arr))
        console.log(newArr,111);

二、 forEatch 循环遍历数组每一项,没有返回值,用来了代替for循环

特点 1:没有返回值, 2:没有return

应用场景:就是遍历数组每一项

var arr = [
  { id: 1, name: 'jack', age: 18 },
  { id: 2, name: 'rose', age: 28 },
  { id: 3, name: 'tom', age: 38 },
]
 let arrList=arr.forEach((itme) => {
 console.log(itme.id);
 console.log(itme.name);
  console.log(itme.age);
  return 123
 });

三、map() 他是循环遍历数组的每一项,然后返回一个新的的数组,同时支持自定义返回值

特点:1 有返回值,返回一个新的数组, 2 有return 同时可以自定义返回值

应用场景:映射数组,对数组每一个元素进行映射处理,得到一个全新的数组

  //1: map场景
        let arr=[10,22,22,13,13,45,66,82,11,17,17]
        /* map方法的特点 
          1:回调函数执行次数:就是本身数组的长度
          2:本身的返回值:映射之后的新数组
          3:回调函数内部 return 
            return 映射之后的值
        */
       let arrMap=arr.map((item,index)=>{
        // 全场8折
         return item*0.8
       })
       console.log(arrMap);

四、 filter() 他是用筛选满足条件的元素

特点:1:有返回值,返回一个新的数组,2:有return ,返回满足条件的那一项的数据

应用场景:方法他是用来筛选数组元素,过滤数组。

   let arr=[10,22,22,13,13,45,66,82,11,17,17]
        let newArr=arr.filter((item,index)=>{
            //找能被2整除的数
            // if(item%2===0){
            //     return item
            // }
            //简写
            return item%2===0
          
        })
        console.log(newArr);

五:some ()方法,判断数组中是否有满足条件的元素(只要一项满足就结束)

特点: 1、有返回值,返回一个 Boolean值,2、有return ,只要一项满足条件就立刻终止循环

应用场景:找出符合条件的数


let  newArr1=arr.some((itme)=>{
  return itme.id==4
})
let  newArr2=arr.some((itme)=>{
  return itme.age==38
})

console.log(newArr1); // ====false
console.log(newArr2);//====true

方法5:every()方法,判断数组中是否有满足条件的元素

特点:1:有返回值,返回一个 Boolean值 2:有return ,只要有个不满足就结束循环返回一个false,只有都满足才会返回true

应用场景:他的经典场景就用来做开关法的

var arr1 = [

  { id: 1, name: 'jack', age: 18 },
  { id: 2, name: 'rose', age: 18 },
  { id: 3, name: 'tom',  age: 18 },
]

let newArr= arr1.every((item)=>{
 return item.age==18
})
let newArr1= arr1.every((item)=>{
  return item.name=='tow'
 })
console.log(newArr);//true
console.log(newArr1);//false

方法6:reduce ()方法

特点:1:有返回值,返回一个Boolean值, 2:有return ,只要有一个不满足就是false

应用场景:主要应用在数组的求和和数组的最大值

应用场景:主要在数组求和,求数组的最大值。
var arr2 = [
  { id: 1, name: 'lining', price: 100, num: 2},
  { id: 2, name: 'anta', price: 200, num: 2 },
  { id: 3, name: 'nike', price: 300, num: 2},
  { id: 4, name: 'tebu', price: 400, num: 2 },
]
 他有三个参数:
 参数sum:上一次回调的返回值,默认是第一个元素值
 value :当前元素值,值从1下标元素开始
 index:当前下标,默认从1开始
 他有一个局限,如果遇到空数组,就会报错,我们在结尾加一个0,这个0代表是从数组0下标开始,值同时也为0
let newArr= arr2.reduce((sum,item,index)=>{

  return sum+item.price  

   console.log(newArr6)

},0)
console.log(newArr);

7:findIndex()方法

特点: 1:有返回值,会返回一个索引[下标] 2:有return ,只要条件满足就会返回索引

应用场景:findIndex跟indexOf不同的是,findIndex能对数组对象的引用类型数据操作,而indexOf只能对数组的普通值类型操作

 var arr = [

 { id: 1, name: '张三', age: 18 },
  { id: 2, name: '李四', age: 18 },
  { id: 3, name: '王五',  age: 18 },
]

let newArr=arr.findIndex((item,index)=>{
    return item.name=='王五'

})
console.log(newArr);

let arr1=[10,20,30,40,50]
let newArr2=arr1.indexOf(40)
console.log(newArr2);

8:find()方法

特点: 1、有返回值,返回一个对象,2、有return ,只要有条件满足就会返回当前满足

 let newArr=arr.find((item)=>{
   if(item.id==2){
    return true
   }
})
 console.log(newArr);

9:slice()方法 ===截取数据

  1. 1个参数:截取数组中的数据返回一个新的数组,不会影响原数组
  2. 2个参数:从参数1开始,到参数2的前一位结束
  3. 3:从下标1开始截取,到下标4,不包含4,包头不包尾
 slice 截取数据

let arr2=['a','b','c','d','e','f']
let newArr= arr2.slice(1,4)
console.log(newArr);

10:splice()方法 ===截取数据

  1. 1个参数:截取数组中的数据返回一个新的数组,会影响原数组
  2. 2 从当前参数的索引开始往后截取
  3. 3 打印原数组返回的是没有背截取的数组
let arr2=['a','b','c','d','e','f']
let newArr1=arr2.splice(1,4)
console.log(newArr1);

总结

image.png

当然也可以用图片来形象理解。

1111.png