zoukankan      html  css  js  c++  java
  • 数组的方法及使用方法(包含ES5,ES6)

    1、concat

    concat() 方法用于连接两个或多个数组。

    该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

    语法:arrayObject.concat(array,......,array)

    参数描述
    arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
    const arr = [1,2,3]
    const brr = [4,5]
    const crr = [6,7]
    const drr = arr.concat(brr)
    const err = arr.concat(brr,crr)
    console.log(drr)  //[1,2,3,4,5]
    console.log(err)  //[1,2,3,4,5,6,7]

    2、join

    join() 方法用于把数组中的所有元素放入一个字符串。

    元素是通过指定的分隔符进行分隔的。

    语法:arrayObject.join(separator)  

     

    参数描述
    separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

    const arr = [1,2,3] console.log(arr.join(',')) // 1,2,3

    3、pop

    pop() 方法用于删除并返回数组的最后一个元素,会改变原数组。

    语法:arrayObject.pop()

    const arr = [1,2,3]
    const brr =arr.pop() //3
    console.log(arr) //[1,2]

    4、push

    push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

    语法:arrayObject.push(newelement1,newelement2,....,newelementX)

    参数描述
    newelement1 必需。要添加到数组的第一个元素。
    newelement2 可选。要添加到数组的第二个元素。
    newelementX 可选。可添加多个元素。
    const arr = [1, 2, 3]
    const brr = [4, 5]
    const obj = {
            name: 'shy',
            age: '22'
        }
    const a = arr.push(brr) 
    const b = arr.push(obj)  
    console.log(arr) //[1, 2, 3, [4,5]]
    console.log(arr) //[1, 2, 3, { name:'shy',age:'22'}]
    console.log(arr) //[1, 2, 3, [4,5],{ name:'shy',age:'22'}]

    5、reverse

    reverse() 方法用于颠倒数组中元素的顺序。

    语法:arrayObject.reverse()

    const arr = [1,2,'a']
    const brr = arr.reverse()
    console.log(brr) //['a',2,1]

    6、shift

    shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

    语法:arrayObject.shift()

    const arr = [1,2,3]
    const brr = arr.shift()
    console.log(arr) //2,3

    7、slice

    slice() 方法可从已有的数组中返回选定的元素

    语法:arrayObject.slice(start,end)

     

    参数描述
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

    可使用负值从数组的尾部选取元素如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素

    const arr = [1,2,3]
    const brr = arr.slice(0,1)
    const crr = arr.slice(0)
    const drr = arr.slice(0,-1)
    console.log(brr)//[1]
    console.log(crr) //[1,2,3]
    console.log(drr) //[1,2]

    8、sort

    sort() 方法用于对数组的元素进行排序。

    语法:arrayObject.sort(sortby)

    参数描述
    sortby 可选。规定排序顺序。必须是函数。
      function sortNumber(a, b) {
            return a - b
        }
        const arr = [6, 1564, 15, 234, 4, 345, 1, 5, 35, 48]
        const brr = ['Aads', 'Bd', 'AD', 'JF', 'XFG']
        console.log(brr.sort()) //["AD", "Aads", "Bd", "JF", "XFG"]
        console.log(arr.sort())  //[1, 15, 1564, 234, 345, 35, 4, 48, 5, 6]
        console.log(arr.sort(sortNumber))//[1, 4, 5, 6, 15, 35, 48, 234, 345, 1564]

    9、splice

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目

    语法:arrayObject.splice(index,howmany,item1,.....,itemX)

     

    参数描述
    index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
    howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
    item1, ..., itemX 可选。向数组添加的新项目。
    const arr = [1, 2, 3]
    const btt = arr.splice(0,1) //删除第一项
    const crr = arr.splice(0,1,"a") //替换
    const drr = arr.splice(2, 0, [4, 5])//增加
    console.log(arr) //[2, 3]
    console.log(arr)  //["a", 2, 3]
    console.log(arr)  //[1, 2,[4,5], 3]

    10、toString

    toString() 方法可把数组转换为字符串,并返回结果。

    语法:arrayObject.toString()

    const arr = [1, 'a', 'SAD']
    console.log(arr.toString()) //1,a,SAD

    11、unshift

    unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

    语法:arrayObject.unshift(newelement1,newelement2,......,newelementX)

     

    参数描述
    newelement1 必需。向数组添加的第一个元素。
    newelement2 可选。向数组添加的第二个元素。
    newelementX 可选。可添加若干个元素。
    const arr = [1, 2, 3]
    const brr = [4, 5]
    const obj = {
           name: 'shy',
           age: '22'
       }
    const a = arr.unshift(brr)
    const b = arr.unshift(obj)
    console.log(arr) //[[4,5],1, 2, 3]
    console.log(arr) //[{ name:'shy',age:'22'},1, 2, 3 ]
    console.log(arr) //[ { name:'shy',age:'22'},[4,5],1, 2, 3]

    ES5部分

    12、Array.isArray()//判断是不是一个数组

     

    语法:Array.isArray(arrayObject)

    const arr = [1,'a',{name:'shy'}]
    console.log(Array.isArray(arr)) //true

    13、Array.forEach() //遍历数组

    语法:array1.forEach(callbackfn[, thisArg])

     

    参数描述
    array1 必选。一个数组对象。
    callbackfn 必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。
    thisArg 可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。

     

    回调函数的形参,依次为,value:遍历的数组内容;index:对应的数组索引,array:数组本身。

        const arr = [1, 'a', { name: 'shy' }]
        function myFunction(value, index, array) {
            //console.log(value) //1 a  {name: "shy"}
            //console.log(index)  // 0 1 2
            console.log(array)  // [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]
        }
        arr.forEach(myFunction)

    14、Array.map() //遍历数组

    语法:array1.map(callbackfn[, thisArg])

     

    参数描述
    array1 必选。一个数组对象。
    callbackfn 必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。
    thisArg 可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。

     

    回调函数的形参,依次为,value:遍历的数组内容;index:对应的数组索引,array:数组本身。

        const arr = [1, 'a', { name: 'shy' }]
        function myFunction(value, index, array) {
            //console.log(value) //1 a  {name: "shy"}
            //console.log(index)  // 0 1 2
            //console.log(array)  // [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]
        }
        arr.map(myFunction)

    map与forEach的异同

    相同点

    • 都是循环遍历数组中的每一项
    • forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项),index(索引值),arr(原数组)
    • 匿名函数中的this都是指向window
    • 只能遍历数组
    • 都不会改变原数组

    区别

    map方法

    1.map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。

    2.map方法不会对空数组进行检测侧,map方法不会改变原数组。

    3.map支持return返回值,也不影响原数组,但是会返回一个新的数组。

    4.若arr为空数组,则map方法返回的也是一个空数组。

    forEach方法

    1.forEach方法用来调用数组的每个元素,将元素传给回调函数。

    2.forEach对于空数组是不会调用回调函数的,无论arr是不是空数组,forEach返回的都是undefined。这个方法只是将数组中的每一项作为callback的参数执行一次。

    3.forEach不支持return,对原来的数组也没有影响。但是我们可以自己通过数组的索引来修改原来的数组。

     

    15、Array.filter() //过滤

    语法:arr.filter(callback(element[, index[, array]])[, thisArg])

    参数

    描述

    callback

    必选。用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留。它接受以下三个参数:

    element

    数组中当前正在处理的元素。

    index

    可选。正在处理的元素在数组中的索引。

    array

    调用了 filter 的数组本身。

    thisArg

    执行 callback 时,用于 this 的值

        const arr = [45, 4, 9, 16, 25];
        function myFunction(value) {
            return value > 18;
        }
       console.log(arr.filter(myFunction)) //[45, 25]

    16、Array.reduce() 

    方法对累加器和数组中的每个元素 (从左到右)应用一个函数,将其减少为单个值。

    语法:array.reduce(callbackfn,[initialValue])

    reduce()方法接收callbackfn函数,而这个函数包含四个参数:

    function callbackfn(preValue,curValue,index,array){}

    参数

    描述

    callback

    必选。回调函数

    preValue

    上一次调用回调返回的值,或者是提供的初始值(initialValue)

    curValue

    数组中当前被处理的数组项

    index

    当前数组项在数组中的索引值

    array

    调用 reduce()方法的数组

    initialValue

    可选项,其值用于第一次调用 callback 的第一个参数。如果没有设置初始值,则将数组中的第一个元素作为初始值

    空数组调用reduce时没有设置初始值将会报错

    //1.数组元素求和
    const arr = [1, 2, 3, 4, 5]
    const brr = arr.reduce((a, b) => a+b)
    console.log(brr) //15
    //2.二维数组转化为一维数组
    const arr = [[1, 2], [3, 4], [5, 6]]
    const brr = arr.reduce((a, b) => a.concat(b),[])
    console.log(brr) //[1, 2, 3, 4, 5, 6]
    //3.计算数组中元素出现的次数
    const arr = [1, 2, 3, 1, 2, 3, 4]
    const brr = arr.reduce((items, item) => {
       if(item in items){
            items[item]++;
        }else{
            items[item] = 1;
        }
        return items;
    },{}) 
    console.log(brr)//{1: 2, 2: 2, 3: 2, 4: 1}
    //4.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.reduce((init, current) => {
        if(init.length === 0 || init.indexOf(current) === -1){
            init.push(current);
        }
        return init;
    },[]) 
    console.log(brr)//[1, 2, 3, 4, 5]
    //5.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.sort().reduce((init, current) => {
        if(init.length === 0 || init[init.length-1] !== current){
            init.push(current);
        }
        return init;
    },[]) //[1, 2, 3, 4, 5]console.log(brr)//6.求最大小值 
    const arr = [1,2,3,4,5]
    const brr = arr.reduce((a, b) =>Math.max(a,b))
    const crr = arr.reduce((a, b) =>Math.min(a,b))
    console.log(brr)//5
    console.log(crr)//1

    17、Array.reduceRight()

    方法对累加器和数组中的每个元素 (从右到左)应用一个函数,将其减少为单个值。

    语法:array.reduceRight(callbackfn,[initialValue])

    reduce()方法接收callbackfn函数,而这个函数包含四个参数:

    function callbackfn(preValue,curValue,index,array){}

    参数

    描述

    callback

    必选。回调函数

    preValue

    上一次调用回调返回的值,或者是提供的初始值(initialValue)

    curValue

    数组中当前被处理的数组项

    index

    当前数组项在数组中的索引值

    array

    调用 reduce()方法的数组

    initialValue

    可选项,其值用于第一次调用 callback 的第一个参数。如果没有设置初始值,则将数组中的第一个元素作为初始值

    空数组调用reduceRight时没有设置初始值将会报错

    //1.数组元素求和
    const arr = [1, 2, 3, 4, 5]
    const brr = arr.reduceRight((a, b) => a+b)
    console.log(brr) //15
    //2.二维数组转化为一维数组
    const arr = [[1, 2], [3, 4], [5, 6]]
    const brr = arr.reduceRight((a, b) => a.concat(b),[])
    console.log(brr) // [5, 6, 3, 4, 1, 2]
    //3.计算数组中元素出现的次数
    const arr = [1, 2, 3, 1, 2, 3, 4]
    const brr = arr.reduceRight((items, item) => {
       if(item in items){
            items[item]++;
        }else{
            items[item] = 1;
        }
        return items;
    },{}) 
    console.log(brr)//{1: 2, 2: 2, 3: 2, 4: 1}
    //4.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.reduceRight((init, current) => {
        if(init.length === 0 || init.indexOf(current) === -1){
            init.push(current);
        }
        return init;
    },[]) 
    console.log(brr)//[1, 2, 3, 4, 5]
    //5.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.sort().reduceRight((init, current) => {
        if(init.length === 0 || init[init.length-1] !== current){
            init.push(current);
        }
        return init;
    },[]) //[1, 2, 3, 4, 5]console.log(brr)//6.求最大小值 
    const arr = [1,2,3,4,5]
    const brr = arr.reduceRight((a, b) =>Math.max(a,b))
    const crr = arr.reduceRight((a, b) =>Math.min(a,b))
    console.log(brr)//5
    console.log(crr)//1

    18、Array.every()

    方法用于检测数组中所有元素是否都符合指定条件,若符合返回true,否则返回false

    语法:array.every(function(item,index,array){

                     //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

                    })

    every()方法使用指定函数检测数组中的所有元素;

    如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回true;

    注意every()不会对空数组进行检测;

               every()不会改变原来的数组

        const arr = [1, 2, 3, 4, 5, 15, 456, 489, 1234]
        function checkArr(arr) {
            //   return arr>= 18;//false
            return arr>= 1; //true    }
        const brr = arr.every(checkArr)
        console.log(brr)

    19、Array.some()

    方法用于检测数组中的元素是否有满足指定条件的,若满足返回true,否则返回false;

    语法:array.some(function(item,index,array){

    //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

                    })

    some()方法会依次执行数组的每个元素;

    如果有一个元素满足条件,则表达式返回true,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false

    注意:some()不会对空数组进行检测;

               some()不会改变原始数组;

      const arr = [1, 2, 3, 4, 5, 15, 456, 489, 1234]
        function checkArr(arr) {
            //   return arr >= 46889;//false
            return arr >= 18; //true    }
        const brr = arr.some(checkArr)
        console.log(brr)

    20、Array.indexOf()

    该方法返回某个元素在数组中的位置。

    语法:array.indexOf(item,start)

    参数:item:必需。规定需检索的字符串值。

     Start:可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

      const arr = [1,2,3,5,4,3,6,4];
          //索引值: 0 1 2 3 4 5 6 7 
         console.log(arr.indexOf(3)); //2
         console.log(arr.indexOf(3,2)); //2
         console.log(arr.indexOf("4")); //-1
         console.log(arr.indexOf(4,3)); //4

    1.只有一个参数时,IndexOf从前往后找第一个item,找到就返回索引值。例如:arr.IndexOf(3)-----从z左到右找第一个3,索引值为2,所以结果就是2。

    2.两个参数时,arr.IndexOf(3,2)------ 在索引 0---2之后找第一个3,其索引值为2,所以结果就是2。 arr.IndexOf(4,3)------在索引 0---3之后找第一个4,其索引值为4,所以结果就是4。

    3.arr.IndexOf("4")------ 因为查找的是字符串"5",所以找不到返回 -1

     

    21、Array.lastIndexOf()

    该方法返回某个元素在数组中的位置。

    语法:array.lastIndexOf(item,start)用法与Array.indexOf()类似

         const arr = [1,2,3,5,4,3,6,4];
            //索引值: 0 1 2 3 4 5 6 7 
         console.log(arr.lastIndexOf(3)); //5
         console.log(arr.lastIndexOf(3,2)); //2
         console.log(arr.lastIndexOf("4")); //-1
         console.log(arr.lastIndexOf(4,6)); //4

    1.只有一个参数时,lastIndexOf从右向左找第一个item,找到就返回索引值。例如:arr.lastIndexOf(3)-----从右向左找第一个3,索引值为5,所以结果就是5。

    2.两个参数时,arr.lastIndexOf(3,2)------在索引0---2之间找3,其索引值为2,所以结果就是2。 arr.lastIndexOf(4,6)------在索引0---6之间找4,其索引值为4,所以结果就是4

     

    ES6

    22、Array.find()

    查找数组内元素,找到第一个符合条件的数组成员,返回该成员的值,如果没有找到,返回undefined

    语法:arr.find(function(item,index,array){

                  //item:当前元素的值;

                                      //index:当前元素的索引;

                                     // array:当前元素的数组对象;

                                })

    const arr = [1, 2, 3, 4, 5, 6]
    const brr = arr.find((value, index, arr) => {
           return value > 3 //4
           return value <-2 //undefined    })
    console.log(brr) // 4

    23、Array.findIndex()

    Array.findIndex():找到满足条件的第一个元素,返回其位置,如果未找到,则返回-1。

    语法:arr.findIndex(function(item,index,array){

                  //item:当前元素的值;

                                        //index:当前元素的索引;

                                       // array:当前元素的数组对象;

                    })

        const arr = [1, 2, 3, 4, 5, 6]
        const brr = arr.findIndex((value, index, arr) => {
            return value > 3 //3
            return value <-2 //-1    })
        console.log(brr) // 3

    24、Array.from()

     Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

      那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。

      1、将类数组对象转换为真正数组:

        const arr = {
    
            0: 'shy',
    
            1: '22',
    
            2: [1, 2, 'a'],
    
            'length': 3
    
        }
    
        const brr = Array.from(arr)
    
        console.log(brr) //["shy", "22", [1,2,'a']]

     那么,如果将上面代码中length属性去掉呢?实践证明,答案会是一个长度为0的空数组。

      这里将代码再改一下,就是具有length属性,但是对象的属性名不再是数字类型的,而是其他字符串型的,代码如下:

        const arr = {
    
            'name': 'shy',
    
            'age': '22',
    
            'array': [1, 2, 'a'],
    
            length: 3
    
        }
    
        const brr = Array.from(arr)
    
        console.log(brr)  // [ undefined, undefined, undefined ]

     会发现结果是长度为3,元素均为undefined的数组

      由此可见,要将一个类数组对象转换为一个真正的数组,必须具备以下条件:

      1、该类数组对象必须具有length属性,用于指定数组的长度。如果没有length属性,那么转换后的数组是一个空数组。

      2、该类数组对象的属性名必须为数值型或字符串型的数字

      ps: 该类数组对象的属性名可以加引号,也可以不加引号

     

      2、将Set结构的数据转换为真正的数组: 

    const arr = [1, 2, 3, 4, 5, 6]
    
    const set = new Set(arr)
    
    const brr = Array.from(set) 
    
    console.log(brr)  // [1, 2, 3, 4, 5, 6]

    Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:

     const arr = [1, 2, 3, 4, 5, 6]
    
     const set = new Set(arr)
    
     const brr = Array.from(set, item => item + 1)
    
     console.log(brr) // [2, 3, 4, 5, 6, 7]

    3、将字符串转换为数组:

        const str = 'hello world!'
    
        const arr = Array.from(str)
    
        console.log(arr) //["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

    4、Array.from参数是一个真正的数组:

        const arr = Array.from([1, 2, 3, 4, 5, 6, 'a'])
    
        console.log(arr) // [1, 2, 3, 4, 5, 6, "a"]

    像这种情况,Array.from会返回一个一模一样的新数组

    25、Array.of(): 把一组值,转成数组

        console.log(Array.of(1, 2, 'a')) //[1, 2, "a"]
    
        console.log(Array.of('a')) // ["a"]
    
        console.log(Array.of('a').length) // 1

    这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。

        console.log(Array()) // []
    
        console.log(Array(3)) // [,,,]
    
        console.log(Array('a')) //["a"]
    
        console.log(Array(1, 2, 3)) // [1, 2, 3]

    上面代码中,Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

    Array.of基本上可以用来替代Array()new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

    console.log(Array.of()) // []
    
    console.log(Array.of(undefined)) // [undefined]
    
    console.log(Array.of('a')) // ['a']
    
    console.log(Array.of(1, 2)) // [1, 2]

    Array.of()总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

     

    26、arr.fill() 填充

    使用制定的元素填充数组,其实就是用默认内容初始化数组。

    语法:arr.fill(value, start, end)

    value:填充值。

    start:填充起始位置,可以省略。

    end:填充结束位置,可以省略,实际结束位置是end-1

    无起止位置

    const arr = [1, 2, 3, 4, 5]
    
    arr.fill(7)
    
    console.log(arr) //[7, 7, 7, 7, 7]

    有开始位置

        const arr = [1, 2, 3, 4, 5]
    
        arr.fill(8, 2)
    
        console.log(arr) // [1, 2, 8, 8, 8]

    有起止位置

        const arr = [1, 2, 3, 4, 5]
    
        arr.fill(8, 2, 3)
    
        console.log(arr) //  [1, 2, 8, 4, 5]

     

    27、arr.includes() // 查找指定元素是否存在,如果存在,返回true,如果不存在返回false

    语法:arr.includes(searchElement, fromIndex)

    searchElement:必须。需要查找的元素值。

    fromIndex:可选。表示判断的起始位置。从该索引处开始查找 searchElement。

    如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。

        const arr = [1, 'a', 'cj', NaN];
    
      console.log(arr.includes("a"));//true
    
        console.log(arr.includes(NaN));//true
    
        console.log(arr.includes("a", 0));//true
    
        console.log(arr.includes("a", 2));//false

     

     

     

     

    1、concat

    concat() 方法用于连接两个或多个数组。

    该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

    语法:arrayObject.concat(array,......,array)

    参数描述
    arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
    const arr = [1,2,3]
    const brr = [4,5]
    const crr = [6,7]
    const drr = arr.concat(brr)
    const err = arr.concat(brr,crr)
    console.log(drr)  //[1,2,3,4,5]
    console.log(err)  //[1,2,3,4,5,6,7]

    2、join

    join() 方法用于把数组中的所有元素放入一个字符串。

    元素是通过指定的分隔符进行分隔的。

    语法:arrayObject.join(separator)  

     

    参数描述
    separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

    const arr = [1,2,3] console.log(arr.join(',')) // 1,2,3

    3、pop

    pop() 方法用于删除并返回数组的最后一个元素,会改变原数组。

    语法:arrayObject.pop()

    const arr = [1,2,3]
    const brr =arr.pop() //3
    console.log(arr) //[1,2]

    4、push

    push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

    语法:arrayObject.push(newelement1,newelement2,....,newelementX)

    参数描述
    newelement1 必需。要添加到数组的第一个元素。
    newelement2 可选。要添加到数组的第二个元素。
    newelementX 可选。可添加多个元素。
    const arr = [1, 2, 3]
    const brr = [4, 5]
    const obj = {
            name: 'shy',
            age: '22'
        }
    const a = arr.push(brr) 
    const b = arr.push(obj)  
    console.log(arr) //[1, 2, 3, [4,5]]
    console.log(arr) //[1, 2, 3, { name:'shy',age:'22'}]
    console.log(arr) //[1, 2, 3, [4,5],{ name:'shy',age:'22'}]

    5、reverse

    reverse() 方法用于颠倒数组中元素的顺序。

    语法:arrayObject.reverse()

    const arr = [1,2,'a']
    const brr = arr.reverse()
    console.log(brr) //['a',2,1]

    6、shift

    shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

    语法:arrayObject.shift()

    const arr = [1,2,3]
    const brr = arr.shift()
    console.log(arr) //2,3

    7、slice

    slice() 方法可从已有的数组中返回选定的元素

    语法:arrayObject.slice(start,end)

    参数描述
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

    可使用负值从数组的尾部选取元素如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素

    const arr = [1,2,3]
    const brr = arr.slice(0,1)
    const crr = arr.slice(0)
    const drr = arr.slice(0,-1)
    console.log(brr)//[1]
    console.log(crr) //[1,2,3]
    console.log(drr) //[1,2]

    8、sort

    sort() 方法用于对数组的元素进行排序。

    语法:arrayObject.sort(sortby)

    参数描述
    sortby 可选。规定排序顺序。必须是函数。
      function sortNumber(a, b) {
            return a - b
        }
        const arr = [6, 1564, 15, 234, 4, 345, 1, 5, 35, 48]
        const brr = ['Aads', 'Bd', 'AD', 'JF', 'XFG']
        console.log(brr.sort()) //["AD", "Aads", "Bd", "JF", "XFG"]
        console.log(arr.sort())  //[1, 15, 1564, 234, 345, 35, 4, 48, 5, 6]
        console.log(arr.sort(sortNumber))//[1, 4, 5, 6, 15, 35, 48, 234, 345, 1564]

    9、splice

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目

    语法:arrayObject.splice(index,howmany,item1,.....,itemX)

     

    参数描述
    index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
    howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
    item1, ..., itemX 可选。向数组添加的新项目。
    const arr = [1, 2, 3]
    const btt = arr.splice(0,1) //删除第一项
    const crr = arr.splice(0,1,"a") //替换
    const drr = arr.splice(2, 0, [4, 5])//增加
    console.log(arr) //[2, 3]
    console.log(arr)  //["a", 2, 3]
    console.log(arr)  //[1, 2,[4,5], 3]

    10、toString

    toString() 方法可把数组转换为字符串,并返回结果。

    语法:arrayObject.toString()

    const arr = [1, 'a', 'SAD']
    console.log(arr.toString()) //1,a,SAD

    11、unshift

    unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

    语法:arrayObject.unshift(newelement1,newelement2,......,newelementX)

     

    参数描述
    newelement1 必需。向数组添加的第一个元素。
    newelement2 可选。向数组添加的第二个元素。
    newelementX 可选。可添加若干个元素。
    const arr = [1, 2, 3]
    const brr = [4, 5]
    const obj = {
           name: 'shy',
           age: '22'
       }
    const a = arr.unshift(brr)
    const b = arr.unshift(obj)
    console.log(arr) //[[4,5],1, 2, 3]
    console.log(arr) //[{ name:'shy',age:'22'},1, 2, 3 ]
    console.log(arr) //[ { name:'shy',age:'22'},[4,5],1, 2, 3]

    ES5部分

    12、Array.isArray()//判断是不是一个数组

     

    语法:Array.isArray(arrayObject)

    const arr = [1,'a',{name:'shy'}]
    console.log(Array.isArray(arr)) //true

    13、Array.forEach() //遍历数组

    语法:array1.forEach(callbackfn[, thisArg])

     

    参数描述
    array1 必选。一个数组对象。
    callbackfn 必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。
    thisArg 可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。

     

    回调函数的形参,依次为,value:遍历的数组内容;index:对应的数组索引,array:数组本身。

        const arr = [1, 'a', { name: 'shy' }]
        function myFunction(value, index, array) {
            //console.log(value) //1 a  {name: "shy"}
            //console.log(index)  // 0 1 2
            console.log(array)  // [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]
        }
        arr.forEach(myFunction)

    14、Array.map() //遍历数组

    语法:array1.map(callbackfn[, thisArg])

     

    参数描述
    array1 必选。一个数组对象。
    callbackfn 必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。
    thisArg 可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。

     

    回调函数的形参,依次为,value:遍历的数组内容;index:对应的数组索引,array:数组本身。

        const arr = [1, 'a', { name: 'shy' }]
        function myFunction(value, index, array) {
            //console.log(value) //1 a  {name: "shy"}
            //console.log(index)  // 0 1 2
            //console.log(array)  // [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]  [1, 'a', { name: 'shy' }]
        }
        arr.map(myFunction)

    map与forEach的异同

    相同点

    • 都是循环遍历数组中的每一项
    • forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项),index(索引值),arr(原数组)
    • 匿名函数中的this都是指向window
    • 只能遍历数组
    • 都不会改变原数组

    区别

    map方法

    1.map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。

    2.map方法不会对空数组进行检测侧,map方法不会改变原数组。

    3.map支持return返回值,也不影响原数组,但是会返回一个新的数组。

    4.若arr为空数组,则map方法返回的也是一个空数组。

    forEach方法

    1.forEach方法用来调用数组的每个元素,将元素传给回调函数。

    2.forEach对于空数组是不会调用回调函数的,无论arr是不是空数组,forEach返回的都是undefined。这个方法只是将数组中的每一项作为callback的参数执行一次。

    3.forEach不支持return,对原来的数组也没有影响。但是我们可以自己通过数组的索引来修改原来的数组。

     

    15、Array.filter() //过滤

    语法:arr.filter(callback(element[, index[, array]])[, thisArg])

    参数

    描述

    callback

    必选。用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留。它接受以下三个参数:

    element

    数组中当前正在处理的元素。

    index

    可选。正在处理的元素在数组中的索引。

    array

    调用了 filter 的数组本身。

    thisArg

    执行 callback 时,用于 this 的值

     

      const arr = [45, 4, 9, 16, 25];
        function myFunction(value) {
            return value > 18;
        }
       console.log(arr.filter(myFunction)) //[45, 25]

    16、Array.reduce() 

    方法对累加器和数组中的每个元素 (从左到右)应用一个函数,将其减少为单个值。

    语法:array.reduce(callbackfn,[initialValue])

    reduce()方法接收callbackfn函数,而这个函数包含四个参数:

    function callbackfn(preValue,curValue,index,array){}

    参数

    描述

    callback

    必选。回调函数

    preValue

    上一次调用回调返回的值,或者是提供的初始值(initialValue)

    curValue

    数组中当前被处理的数组项

    index

    当前数组项在数组中的索引值

    array

    调用 reduce()方法的数组

    initialValue

    可选项,其值用于第一次调用 callback 的第一个参数。如果没有设置初始值,则将数组中的第一个元素作为初始值

    空数组调用reduce时没有设置初始值将会报错

    //1.数组元素求和
    const arr = [1, 2, 3, 4, 5]
    const brr = arr.reduce((a, b) => a+b)
    console.log(brr) //15
    //2.二维数组转化为一维数组
    const arr = [[1, 2], [3, 4], [5, 6]]
    const brr = arr.reduce((a, b) => a.concat(b),[])
    console.log(brr) //[1, 2, 3, 4, 5, 6]
    
    //3.计算数组中元素出现的次数
    const arr = [1, 2, 3, 1, 2, 3, 4]
    const brr = arr.reduce((items, item) => {
       if(item in items){
            items[item]++;
        }else{
            items[item] = 1;
        }
        return items;
    },{}) 
    console.log(brr)//{1: 2, 2: 2, 3: 2, 4: 1}
    //4.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.reduce((init, current) => {
        if(init.length === 0 || init.indexOf(current) === -1){
            init.push(current);
        }
        return init;
    },[]) 
    console.log(brr)//[1, 2, 3, 4, 5]
    //5.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.sort().reduce((init, current) => {
        if(init.length === 0 || init[init.length-1] !== current){
            init.push(current);
        }
        return init;
    },[]) //[1, 2, 3, 4, 5]
    console.log(brr)
    //6.求最大小值 
    const arr = [1,2,3,4,5]
    const brr = arr.reduce((a, b) =>Math.max(a,b))
    const crr = arr.reduce((a, b) =>Math.min(a,b))
    console.log(brr)//5
    console.log(crr)//1

    17、Array.reduceRight()

    方法对累加器和数组中的每个元素 (从右到左)应用一个函数,将其减少为单个值。

    语法:array.reduceRight(callbackfn,[initialValue])

    reduce()方法接收callbackfn函数,而这个函数包含四个参数:

    function callbackfn(preValue,curValue,index,array){}

    参数

    描述

    callback

    必选。回调函数

    preValue

    上一次调用回调返回的值,或者是提供的初始值(initialValue)

    curValue

    数组中当前被处理的数组项

    index

    当前数组项在数组中的索引值

    array

    调用 reduce()方法的数组

    initialValue

    可选项,其值用于第一次调用 callback 的第一个参数。如果没有设置初始值,则将数组中的第一个元素作为初始值

    空数组调用reduceRight时没有设置初始值将会报错

    //1.数组元素求和
    const arr = [1, 2, 3, 4, 5]
    const brr = arr.reduceRight((a, b) => a+b)
    console.log(brr) //15
    //2.二维数组转化为一维数组
    const arr = [[1, 2], [3, 4], [5, 6]]
    const brr = arr.reduceRight((a, b) => a.concat(b),[])
    console.log(brr) // [5, 6, 3, 4, 1, 2]
    
    //3.计算数组中元素出现的次数
    const arr = [1, 2, 3, 1, 2, 3, 4]
    const brr = arr.reduceRight((items, item) => {
       if(item in items){
            items[item]++;
        }else{
            items[item] = 1;
        }
        return items;
    },{}) 
    console.log(brr)//{1: 2, 2: 2, 3: 2, 4: 1}
    //4.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.reduceRight((init, current) => {
        if(init.length === 0 || init.indexOf(current) === -1){
            init.push(current);
        }
        return init;
    },[]) 
    console.log(brr)//[1, 2, 3, 4, 5]
    //5.数组去重
    const arr = [1, 2, 3, 1, 2, 3, 4, 4, 5]
    const brr = arr.sort().reduceRight((init, current) => {
        if(init.length === 0 || init[init.length-1] !== current){
            init.push(current);
        }
        return init;
    },[]) //[1, 2, 3, 4, 5]
    console.log(brr)
    //6.求最大小值 
    const arr = [1,2,3,4,5]
    const brr = arr.reduceRight((a, b) =>Math.max(a,b))
    const crr = arr.reduceRight((a, b) =>Math.min(a,b))
    console.log(brr)//5
    console.log(crr)//1

    18、Array.every()

    方法用于检测数组中所有元素是否都符合指定条件,若符合返回true,否则返回false

    语法:array.every(function(item,index,array){

                     //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

                    })

    every()方法使用指定函数检测数组中的所有元素;

    如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回true;

    注意:every()不会对空数组进行检测;

               every()不会改变原来的数组

        const arr = [1, 2, 3, 4, 5, 15, 456, 489, 1234]
        function checkArr(arr) {
            //   return arr>= 18;//false
            return arr>= 1; //true
        }
        const brr = arr.every(checkArr)
        console.log(brr)

    19、Array.some()

    方法用于检测数组中的元素是否有满足指定条件的,若满足返回true,否则返回false;

    语法:array.some(function(item,index,array){

    //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

                    })

    some()方法会依次执行数组的每个元素;

    如果有一个元素满足条件,则表达式返回true,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false

    注意:some()不会对空数组进行检测;

               some()不会改变原始数组;

        const arr = [1, 2, 3, 4, 5, 15, 456, 489, 1234]
        function checkArr(arr) {
            //   return arr >= 46889;//false
            return arr >= 18; //true
        }
        const brr = arr.some(checkArr)
        console.log(brr)

    20、Array.indexOf()

    该方法返回某个元素在数组中的位置。

    语法:array.indexOf(item,start)

    参数:item:必需。规定需检索的字符串值。

     Start:可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

         const arr = [1,2,3,5,4,3,6,4];
      //索引值: 0 1 2 3 4 5 6 7 
         console.log(arr.indexOf(3)); //2
         console.log(arr.indexOf(3,2)); //2
         console.log(arr.indexOf("4")); //-1
         console.log(arr.indexOf(4,3)); //4

    1.只有一个参数时,IndexOf从前往后找第一个item,找到就返回索引值。例如:arr.IndexOf(3)-----从z左到右找第一个3,索引值为2,所以结果就是2。

    2.两个参数时,arr.IndexOf(32)------ 在索引 0---2之后找第一个3,其索引值为2,所以结果就是2。 arr.IndexOf(43)------在索引 0---3之后找第一个4,其索引值为4,所以结果就是4

    3.arr.IndexOf("4")------ 因为查找的是字符串"5",所以找不到返回 -1

    21、Array.lastIndexOf()

    该方法返回某个元素在数组中的位置。

    语法:array.lastIndexOf(item,start)用法与Array.indexOf()类似

         const arr = [1,2,3,5,4,3,6,4];
           //索引值: 0 1 2 3 4 5 6 7 
         console.log(arr.lastIndexOf(3)); //5
         console.log(arr.lastIndexOf(3,2)); //2
         console.log(arr.lastIndexOf("4")); //-1
         console.log(arr.lastIndexOf(4,6)); //4

    1.只有一个参数时,lastIndexOf从右向左找第一个item,找到就返回索引值。例如:arr.lastIndexOf(3)-----从右向左找第一个3,索引值为5,所以结果就是5

    2.两个参数时,arr.lastIndexOf(3,2)------在索引0---2之间找3,其索引值为2,所以结果就是2。 arr.lastIndexOf(4,6)------在索引0---6之间找4,其索引值为4,所以结果就是4

     

    ES6

    22、Array.find()

    查找数组内元素,找到第一个符合条件的数组成员,返回该成员的值,如果没有找到,返回undefined

    语法:arr.find(function(item,index,array){

                  //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

     

                    })

    const arr = [1, 2, 3, 4, 5, 6]
    const brr = arr.find((value, index, arr) => {
           return value > 3 //4
           return value <-2 //undefined
        })
    console.log(brr) // 4

    23、Array.findIndex()

    Array.findIndex():找到满足条件的第一个元素,返回其位置,如果未找到,则返回-1。

    语法:arr.findIndex(function(item,index,array){

                  //item:当前元素的值;

                        //index:当前元素的索引;

                        // array:当前元素的数组对象;

                    })

        const arr = [1, 2, 3, 4, 5, 6]
        const brr = arr.findIndex((value, index, arr) => {
            return value > 3 //3
            return value <-2 //-1
        })
        console.log(brr) // 3

    24、Array.from()

     Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

      那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。

      1、将类数组对象转换为真正数组:

        const arr = {
            0: 'shy',
            1: '22',
            2: [1, 2, 'a'],
            'length': 3
        }
        const brr = Array.from(arr)
        console.log(brr) //["shy", "22", [1,2,'a']]

     那么,如果将上面代码中length属性去掉呢?实践证明,答案会是一个长度为0的空数组。

    这里将代码再改一下,就是具有length属性,但是对象的属性名不再是数字类型的,而是其他字符串型的,代码如下:

        const arr = {
            'name': 'shy',
            'age': '22',
            'array': [1, 2, 'a'],
            length: 3
        }
        const brr = Array.from(arr)
        console.log(brr)  // [ undefined, undefined, undefined ]

     会发现结果是长度为3,元素均为undefined的数组

      由此可见,要将一个类数组对象转换为一个真正的数组,必须具备以下条件:

      1、该类数组对象必须具有length属性,用于指定数组的长度。如果没有length属性,那么转换后的数组是一个空数组。

      2、该类数组对象的属性名必须为数值型或字符串型的数字

      ps: 该类数组对象的属性名可以加引号,也可以不加引号

    2、将Set结构的数据转换为真正的数组: 

    const arr = [1, 2, 3, 4, 5, 6]
    const set = new Set(arr)
    const brr = Array.from(set) 
    console.log(brr)  // [1, 2, 3, 4, 5, 6]

    Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:

     const arr = [1, 2, 3, 4, 5, 6]
     const set = new Set(arr)
     const brr = Array.from(set, item => item + 1)
     console.log(brr) // [2, 3, 4, 5, 6, 7]

    3、将字符串转换为数组:

        const str = 'hello world!'
        const arr = Array.from(str)
        console.log(arr) //["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

    4、Array.from参数是一个真正的数组:

        const arr = Array.from([1, 2, 3, 4, 5, 6, 'a'])
        console.log(arr) // [1, 2, 3, 4, 5, 6, "a"]

    像这种情况,Array.from会返回一个一模一样的新数组

    25、Array.of(): 把一组值,转成数组

        console.log(Array.of(1, 2, 'a')) //[1, 2, "a"]
        console.log(Array.of('a')) // ["a"]
        console.log(Array.of('a').length) // 1

    这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。

        console.log(Array()) // []
        console.log(Array(3)) // [,,,]
        console.log(Array('a')) //["a"]
        console.log(Array(1, 2, 3)) // [1, 2, 3]

    上面代码中,Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

    Array.of基本上可以用来替代Array()new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

    console.log(Array.of()) // []
    console.log(Array.of(undefined)) // [undefined]
    console.log(Array.of('a')) // ['a']
    console.log(Array.of(1, 2)) // [1, 2]

    Array.of()总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

     

    26、arr.fill() 填充

    使用制定的元素填充数组,其实就是用默认内容初始化数组。

    语法:arr.fill(value, start, end)

    value:填充值。

    start:填充起始位置,可以省略。

    end:填充结束位置,可以省略,实际结束位置是end-1 

    无起止位置

    const arr = [1, 2, 3, 4, 5]
    arr.fill(7)
    console.log(arr) //[7, 7, 7, 7, 7]

    有开始位置

        const arr = [1, 2, 3, 4, 5]
        arr.fill(8, 2)
        console.log(arr) // [1, 2, 8, 8, 8]

    有起止位置

        const arr = [1, 2, 3, 4, 5]
        arr.fill(8, 2, 3)
        console.log(arr) //  [1, 2, 8, 4, 5]

     

    27、arr.includes() // 查找指定元素是否存在,如果存在,返回true,如果不存在返回false

    语法:arr.includes(searchElement, fromIndex)

    searchElement:必须。需要查找的元素值。

    fromIndex:可选。表示判断的起始位置。从该索引处开始查找 searchElement。

    如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。 

        const arr = [1, 'a', 'cj', NaN];
      console.log(arr.includes("a"));//true
        console.log(arr.includes(NaN));//true
        console.log(arr.includes("a", 0));//true
        console.log(arr.includes("a", 2));//false

     

     

    1.只有一个参数时,IndexOf从前往后找第一个item,找到就返回索引值。例如:arr.IndexOf(3)   -----   从z左到右找第一个3,索引值为2,所以结果就是2。

    2.两个参数时,arr.IndexOf(32)  ------  在索引 0---2之后找第一个3,其索引值为2,所以结果就是2。 arr.IndexOf(43)  ------  在索引 0---3之后找第一个4,其索引值为4,所以结果就是4

    3.arr.IndexOf("4")  ------  因为查找的是字符串"5",所以找不到返回 -1

  • 相关阅读:
    以puppeteer抓取微指数,puppeteer基本示例,docker部署headless
    kubernets基于容器日志的报警和服务自动恢复
    mysql truncate 的问题
    kubernets轻量 contain log 日志收集技巧
    用logstash 作数据的聚合统计
    编译安装 logstash-output-jdbc
    技术沙龙记录1
    javascript的几个知识点scoping,execution context, hoisting, IIFE
    TDD 测试驱动开发
    css及HTML知识点
  • 原文地址:https://www.cnblogs.com/shy0113/p/12567242.html
Copyright © 2011-2022 走看看