JavaScript,数组的方法以及回调函数!!!

数组的常用方法:

push(v1,v2,v3...) 向数组尾部追加值
pop() 在数组尾部删除一个值
unshift() 向数组的头部追加值
shift() 向数组的头部删除一个值
join() 把数组变成字符串
includes() 判断数组中是否存在某个值
indexOf() 判断数组中是否存在某个值,返回第一次出现的下标,找不到就返回-1
lastIndexOf() 判断数组中是否存在某个值,返回最后一次出现的下标
concat() 拼接数组,返回一个新的数组
slice(i,i) 截取数组中的部分值,返回一个新的数组 (包前不包后)
splice(i , 删除的个数 , 新增的值...) 新增,删除,替换 --- 直接改变原数组 !!!!!!!

用法:

push, pop, unshift, shift在上一篇博客中讲明了,这里说说别的方法的用法。
join()includes()indexOf()lastIndexOf()

<script>
        var arr = [1, 2, 3, 4, 2, 5];
        var str = arr.join('&');//用&符号将数据拼接
        console.log(str);
        console.log(arr.includes(20));//数组中不存在20,返回false
        console.log(arr.indexOf(2));//数组中存在2,返回2出现第一次的下标 1
        console.log(arr.lastIndexOf(2));//数组中存在2,返回2最后一次出现的下标
    </script>
复制代码

concat()拼接数组,返回一个新的数组

        var arr1 = [1, 2, 3, 4];
        var arr2 = [6, 7, 8];
        var arr3 = arr1.concat(arr2);
        console.log(arr3);//结果为[1,2,3,4,6,7,8]
复制代码

slice(i,i) 截取数组中的值 (包前不包后)

      var arr4 = [1, 2, 3, 4, 5, 6, 7];
        var arr5 = arr4.slice(2, 5);//截取下标为2到4的值,是下标哈,不包括下标为5的
        console.log(arr5);//结果为[3,4,5]
复制代码

splice(i , 删除的个数 , 新增的值...) 新增,删除,替换 --- 直接改变原数组,经常用到这个方法。\

  • 用法1:在任意位置插入数据 arr.splice(i , 0 , v1 ,v2 , v3 ....)
var arr = [1, 2, 3, 4, 5];
        arr.splice(arr.length, 0, 'a', 'b', 'c');//在第arr.length(数组长度)位置上删除0个数,增加‘a’,'b','c'
        console.log(arr);//[1,2,3,4,5,'a','b','c']
复制代码
  • 用法2:删除 arr.splice(i , 删除的个数)
//数组[1,2,3,4,5,'a','b','c']
 arr.splice(2, 2);//找到下标2对应的值开始,删除两个数
        console.log(arr);//[1,2,5,'a','b','c']
复制代码
  • 用法3:替换arr.splice( i , 删除的个数 , 替换的值...)
//[1,2,5,'a','b','c']
   arr.splice(3, 3, 'A', 'B', 'C');//找到下标3对应的值开始,往后删除3个值,即小写a,b,c会被删除,然后加上大写ABC
        console.log(arr);//[1,2,5,'A','B','C']
复制代码

数组的判断方法:

这里又要提到数据类型了;
基本数据类型:number , string, boolean, null , undefined
基本数据类型可以通过typeof来判断
引用数据类型:function 数组 对象
Array.isArray() 判断是不是数组
例如:

 var arr = [1, 2, 3];
        console.log(typeof arr); // object 用判断基本数据类型无法判断
        console.log(Array.isArray(arr));//true,
复制代码

数组中常见的问题:

数组去重:

方法一:得到新数组:可以用上面所说的includes()方法,返回的值是布尔值

<script>
        var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
        var newArr = [];
        // 遍历原数组
        for (var i in arr) {
            // 判断原数组中每一个值是否在新数组中存在,不存在就假到新数组中
             if(!newArr.includes(arr[i])) {
                 newArr.push(arr[i])
             }
        }
        console.log(newArr);//[1,2,3,42,5]
复制代码

方法二:直接改变原数组,拿第一个值出来跟后面所有的值作比较,出现重复的就删掉,要注意数组塌陷,因为每次删除一个值的时候,数组的长度会改变,进而,下标也会发生变化。

var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];

        // 比较的轮数
        for (var i = 0; i < arr.length - 1; i++) {
            // 拿第i个数与后面所有的数进行比较
            for (var j = i + 1; j < arr.length; j++) {
                // 只要相同就删除
                if (arr[i] === arr[j]) {
                    // 每删除一个的时候,数组塌陷!!!!!!!!!!
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr);//[1,2,3,42,5]达到去重的目的
复制代码

统计数组中每一个值出现的次数:

方法一:先去重再统计
思路:先将数组去重,得到一个没有重复值的新数组,然后再那新数组中的每一个值与原数组进行比较,如果出现相同的值就加一

var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
var arr2 = [] ;
        for(var i = 0 ; i < arr.length ; i++) {
            if(!arr2.includes(arr[i])) {
                arr2.push(arr[i])
            }
        } 
        console.log(arr2);//[1,2,3,42,5]
        // 拿新数组中的每一个值与原数组进行比较
        for(var i = 0 ; i < arr2.length ; i++) {
            //定义的计数器
            var count = 0 ; 
            for(var j = 0 ; j < arr.length ; j++) {
                if(arr2[i] === arr[j]) {
                    count++
                }
            }
            console.log(arr2[i] + '出现了' + count + '次');
        }
复制代码

结果如下:

image.png
方法二:一边删除一边统计
思路:拿数组中第一个值与后面的值进行比较,碰到重复的值就删除,所以要用到splice()方法,需要注意数组塌陷,直到最后一个值,就删除干净了

var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
for (var i = 0; i < arr.length; i++) {
            // 拿第一个值与后面的值进行比较
            //计数器,数组每个数至少出现了一次
            var count = 1;
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i] === arr[j]) {//判断是否相等,相等就删除,计数器就加一
                    count++;
                    arr.splice(j, 1);
                    j--;//注意数组塌陷
                }
            }
            console.log(arr[i] + '出现了' + count + '次');
        }
        console.log(arr);
复制代码

image.png
方法三:先排序再统计
思路:排序后,拿数组中第一个值与后面的值进行比较,相等就计数加一,注意这里就不用依次那值去比较了,因为排序后重复的值都在一块,比较一轮后,直接跳到比较出现不相等的位置

//为了方便讲解直接定义一个排序好的数组,可以用冒泡排序,选择排序来排序的,还可以运用sort()方法来排序
 var arr = [1, 1, 1, 1, 2, 2, 2, 3, 4, 4];

        for (var i = 0; i < arr.length;) {
            var count = 1;
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i] === arr[j]) {
                    count++;
                } else {
                    // 只要不相等说明后面没有相同 的了
                    break;
                }
            }
            console.log(arr[i] + '出现了' + count + '次');
            i += count//i直接跳到计数的位置,因为重复的都在一块
        }
复制代码

image.png

回调函数:

回调函数难以理解,其实就是把一个函数当做另一个函数的参数,注意,特别注意的是要分清实参与形参。
下一篇好好说说回调函数。

猜你喜欢

转载自juejin.im/post/7041973048039178276
今日推荐