js中数组的常用类型即遍历方法

165 阅读5分钟

数组的常用类型

1.push

语法:数组.push(数据)

作用:向数组末位添加数据

返回值:追加数据后,数组最新的长度(Length)

<script>
    var arr = [1,2,3]
          arr.push(500)
          var a = arr.push(500)
          console.log(arr)//打印值为[1,2,3,500]
          console.log(a)//打印值为4
</script> 

2.pop

作用:删除数组末尾的数据

语法:数组.pop()

返回值:数组被删除的值

<script>

           var arr = [1,2,3]
          arr.pop()
          var a = arr.pop()
          console.log(arr)//打印值为[1,2]
          console.log(a)//打印值为3
</script> 

3.unshift

语法:数组.unshift(数据)

作用:向数组首位添加数据

返回值:追加数据后,数组最新的长度(Length)

<script>
    var arr = [1,2,3]
    arr.unshift(500)
    var a = arr.unshift(500)
    console.log(arr)//打印值为[500,1,2,3]
    console.log(a)//打印值为4
</script>

4.shift

作用:删除数组首尾的数据

语法:数组.shift()

返回值:数组被删除的值

<script>
    var arr = [1,2,3]
    arr.shift()
    var a = arr.shift()
    console.log(arr)//打印值为[2,3]
    console.log(a)//打印值为1
</script>

5.reverse

作用:反转数组

语法:数组.reverse

返回值:反转后的数组

<script>
    var arr = [1,2,3]
    arr.reverse()
    var a = arr.reverse()
    console.log(a)//打印值为[3,2,1]
    console.log(arr)//打印值为[3,2,1]
</script>

6.sort

语法:1.:数组.sort()

作用:会将数据全部转为字符串,然后一位一位比较

返回值:排列后的数组

<script>
    var arr = [100,110,1200,120001,10,10000,1100000]
    console.log(arr.sort(arr))//打印值为[10,100,10000,110,1100000,1200,120001]

</script>

2.:数组.sort(function(a,b){return a - b})

作用:会按照数字大小升序排列

<script>
    var arr = [100,110,1200,120001,10,10000,1100000]
    console.log(arr.sort(function(a,b){return a - b}))//打印值为[10,100,110,1200,10000,120001,1100000]
</script>

3.:数组.sort(function(a,b){return b - a})

作用:会按照数字大小降序排列

<script>
    var arr = [100,110,1200,120001,10,10000,1100000]
    console.log(arr.sort(function(a,b){return b - a}))//打印值为[1100000,120001,10000,1200,110,100,10]
</script>

7.splice

语法:1.:数组.splice(开始索引(下标),多少个)

作用:截取数组部分内容

<script>
    var arr = [1,2,3,4,5,6,7]
    arr.splice(3 , 2)//从下标3开始,截取两个
    console.log(arr.splice(3 , 2))//打印值为[4,5]
    console.log(arr)//打印值为[1,2,3,6,7]
</script>

语法2: 数据.splice(开始索引(下标),多少个, 插入数据1 , 插入数据2 , 插入数据3 , 插入数据4 .....)

作用:截取部分内容,并插入新的内容.

<script>
    var newArr = arr.splice(2, 3, '数据1', '数据2', '数据3', '数据4', '数据5')  // 不管插入多少个数据, 都是从下标2开始的
        console.log('newArr', newArr)//打印值[3,4,5]
        console.log('arr', arr)//打印值[1,2, '数据1', '数据2', '数据3', '数据4', '数据5',6,7]
</script>

返回值:截取出来的部分内容, 组成的内容 .

能够改变原数组的方法只有上述七个

8.slice

作用:截取数组部分内容

语法:数组.slice(开始索引(下标),结束索引(下标))

     <!--!特点:1.包前不包后(包含开始索引的内容,不包含结束索引的内容)
     <!--!   2.不写开始索引默认为0(原数组的全部内容)
     <!--!   3.不写结束索引默认为数组的length(从开始索引往后的所有内容)
     <!--!   4. 参数可以为负数,表示倒数第几个(length - n) -->

返回值:截取出来的部分内容, 组成的内容.

<script>
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        //         0  1  2  3  4  5  6  7  8
        console.log('原始数组: ', arr)

        // var newArr = arr.slice(3, 4)    // 从 下标3 开始截取, 截取到 下标4
        // console.log('newArr', newArr)   // [4]
        // console.log('arr', arr)

        var newArr = arr.slice(5)   // 不写 结束索引, 相当于 写了数组.length, 所以这里相当于写了 slice(5, arr.length)
        console.log(newArr) // [6, 7, 8, 9]

        /**
         *  此时 开始索引与结束索引都没有填写,  那么 开始索引相当于是写了一个 0,    结束索引相当于写了 数组.length
         *
         *      arr.slice()     相当于写了      arr.slice(0, arr.length)
         */
        // var newArr = arr.slice()
        // console.log(newArr)

        var newArr = arr.slice(3, -2)
        console.log(newArr) // [4, 5, 6, 7]
        /**
         *  arr.slice(3, -2)
         *      slice 这个方法 允许写 负数
         * 
         *      写负数的时候 就相当于写了 length + 负数
         * 
         *      arr.slice(3, -2)    ->      arr.slice(3, arr.length + (-2))     -> arr.slice(3, arr.length - 2)
         *                                                                      -> arr.slice(3, 9 - 2)
         *                                                                      -> arr.slice(3, 7)
        */
</script>

splice和slice的区别

  1. 参数含义不同, 然后介绍一下 参数哪里不同
  2. splice 会改变原数组, 而 slice 不会

9.concat

语法:原始数组.concat(数组1,数组2)

作用:进行数据拼接,把数组....数据之类的小括号里的内容,拼接在原始数组里

返回值:拼接好的数组

<script>
     var arr = [1,2,3]//原始数组
     var a = arr.concat([4,5,6],[10,20,30],'abc',100)
     console.log(a)//打印值:[1,2,3,4,5,6,10,20,30,'abc',100]
     console.log(arr)//打印值:[1,2,3]
</script>

10.join

语法:数组.join('连接符')

作用:使用"连接符",把数组内的每一个数据连接成一个字符串(不写连接符默认使用逗号)

返回值:链接好的字符串

<script>
    var arr= [1,2,3,a]
    var a = arr.join()
    var b = arr.join(!)
    console.log(a)//打印值:'1,2,3,a'
    console.log(b)//打印值:'1!2!3!a' 
    console.log(arr)//打印值:[1,2,3,a]
</script>

11.indexOf

语法:1.:数组.indexOf(要检查的数据)

作用:从前到后(从左到右)检查该数据第一次在该数组内出现的索引(下标)

返回值:1.找到数据的情况下,会将该数据第一次出现的下标返回

2.没找到的情况下,会直接返回-1

<script>
     var arr = [1,1,2,2,3,3,0,4,0]
     var a = arr.indexOf(0)
     var b = arr.indexOf(100)
     console.log(a)//打印值:6
     console.log(b)//打印值:-1
</script>

语法2:数组.indexOf(要检查的数据,开始索引)

作用:在开始索引的位置,按照从左到右的顺序检查该数据在该 数组第一次出现的位置.

返回值:1.找到数据的情况下,会将该数据第一次出现的下标返回

2.没找到的情况下,会直接返回-1

<script>
    var c = arr.indexOf(1,3)//表示要检查的数据是1,从下标3开始从左到右检查
    console.log(c)//打印值:-1
</script>

开始索引不写默认为0

12.LastIndexOf

语法1:数组.LastIndexOf(要检查的数据)

 作用:从后到前(从右到左)检查该数据第一次在该数组内出现的索引(下标)
 

返回值:1.找到数据的情况下,会将该数据第一次出现的下标返回

2.没找到的情况下,会直接返回-1

<script>
    var arr = [1,1,2,2,3,3,0,4,0]
    var a = arr.LastIndexOf(0)
    var b = arr.LastIndexOf(100)
    console.log(a)//打印值:8
    console.log(b)//打印值:-1
</script>

语法2:数组.LastIndexOf(要检查的数据,开始索引)

作用:在开始索引的位置,按照从右到左的顺序检查该数据在该 数组第一次出现的位置

<script>
    var c = arr.LastIndexOf(1,3)//表示要检查的数据是1,从下标3开始从右到左检查
    console.log(c)//打印值:1
</script>

数组遍历的常用方法

1.forEach

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

                    item:数组的每一项的值
                    index:数组的每一项对应的下标
                    origin:原始数组(了解即可,一般不用)

作用:遍历数组(拿到数组里的所有数据)

返回值:该方法永远没有返回值,(永远都是undefined)

<script>
    var arr = [100,200,300,400,500,600]
    arr.forEach(function(item, index, origin){
    console.log(item)//arr的每一项的值
    console.log(index)//arr的每一项值得对应下标
    console.log(origin)//数组arr
    })
</script>

代码写在function的{}里

2.map

语法:数组.map(function(item, index, origin){})(参数意义与forEach相同)

作用:映射数组

返回值:返回一个和原数组长度相同的数组,但是内部数据可以经过我们映射加工

映射加工:就是在函数内,以 return 的形式书写

<script>
    var arr = [100,200,300,400,500,600]
    var a = arr.map(function(item, index, origin){
    return item
    })
    console.log(a)//打印值与arr数组
    var b = arr.map(function(item, index, origin){
    return item * 2
    })
    console.log(b)//长度与arr相同的数组,但数据是arr各项的两倍
</script>

forEach与map的区别

1.forEach是用来遍历数组的,而map是用来映射数组的

2.forEach没有返回值,而map是可以有返回值的

3.filter

语法:数组.filter(function(item, index, origin){})(参数意义与上述相同)

作用:过滤数组

返回值:返回一个新数组,内部为原始数组滤的部分内容

过滤条件:以return的形式书写

<script>
     var arr = [100,200,300,400,500,600]
     var a = arr.filter(function(item, index, origin){
     return item > 350
     }) //只留下原数组大于350的值
     console.log(a)//打印值[400,500,600]
     console.log(arr)//打印值[100,200,300,400,500,600]
</script>

4.find

语法:数组.find(function(item, index, origin){})(参数意义与上述相同)

作用:在数组内查找满足条件的第一项

返回值:找到的数据

查找条件:以return的形式书写

<script>
    var arr = [100,200,300,400,500,600]
    var a = arr.find(function(item, index, origin){
    return item > 350
    })
    console.log(a)//打印值:400(因为400是第一个大于350的值)
</script>

5.findIndex

语法:数组.findIndex(function(item, index, origin){})(参数意义与上述相同)

作用:在数组内查找满足条件的第一个数据的下标

返回值:1.找到数据的情况下,会将该满足条件的第一个数据的下标返回

2.没找到的情况下,会直接返回-1

查找条件:以return的形式书写

<script>
    var arr = [100,200,300,400,500,600]
    var a = arr.findIndex(function(item, index, origin){
    return item > 350
    })
    console.log(a)//打印值:3(因为400是第一个大于350的值,并且它的下标为3)
</script>

6.some

语法:数组.some(function(item, index, origin){})(参数意义与上述相同)

作用:判断数组内是否有一个满足条件的

返回值:一个布尔值:true/false

判断条件:以return的形式书写

<script>
    var arr = [1,2,3,4,5,6]
    var a = arr.some(function(item, index, origin){
    return item % 2 === 0
    })
    console.log(a)//打印值true
</script>

7.every

语法 数组.every(function(item, index, origin){})(参数意义与上述相同)

作用:判断数组内是否全部满足条件的

返回值:一个布尔值:true/false

判断条件:以return的形式书写

<script>
     var arr = [1,2,3,4,5,6]
     var a = arr.every(function(item, index, origin){
     return item % 2 === 0
     })
     console.log(a)//打印值:false(因为arr数组不是全部满足条件)
</script>

8.reduce

语法:数组.reduce(function(prev,item, index, origin){},init)

 prev:表示初始值或上一次的运算果 

init:prev的初始数据(不写时默认为数组第一项的值,而item则会从第二项开始运算)
     (其他参数意义与上述相同)

作用:用来实现叠加结果

返回值:最终的叠加结果

注意:

1.叠加条件以return的形式书写
2.prev第一次的值,如果传递了init,就是init的值,如果没传递init则是arr[0]的值
3.如果传递了init那么循环次数就是arr.length,如果没有传递init那么循环次数就是length-1
<script>
    var arr = [1,2,3,4]
    var a = arr.reduce(function(prev,item, index, origin){
    return prev + item
    },0)
</script>