• JS数组练习


    数组基本知识

    改变原数组(7个)

    1、push(),在数组后面添加元素

    2、pop(),剪切数组的最后元素

    不需要传入参数,传入也没用

    3、shift( ),减去前面的元素

    4、unshift( ),在前面添加元素

    5、splice(),截取数组元素

    6、reverse(),反转

    7、sort(),升序排序,按ASCII码来排列的

    从小到大排序后的数组 = 数组.sort(function(a,b){
    
                return a-b;
    
    });

    • 无参:按照数组元素的首字符对应的Unicode编码值,从小到大排列数组元素。

    • 带参:必须为函数(回调函数:callback)。这个回调函数中带有两个参数,代表数组中的前后元素。

      • 如果返回值(a-b)为负数,a排b前面。

      • 如果返回值(a-b)等于0,不动。

      • 如果返回值(a-b)为正数,a排b后面。

    上面的这个带参的排序,其实是调用了底层的冒泡排序,小的排前面,大的排后面。

    PS:sort方法的功能非常强大,能对数字和字母进行排列。

    升序

    降序

    排对象也是可以的,按字节排序。

    不改变原数组(5个)

    1、concat(),拼接数组

    2、join(),连接数组内部元素,必须加字符串,虽然直接加数字也可以

    3、split(), 把一个字符串分割成字符串数组

    4、toString(),数组元素

    5、slice(),截取数据

    不传入参数就是整体截取,1个参数就是从该处开始截取到尾部

    实例

    查找数组中的指定元素,并返回索引值

    <script>
        var arr = [1,2,3,6,8];
        function indexOf(arr,item) {
            if (Array.prototype.indexOf){ //这里是考虑其兼容性问题,如果没有该方法原型的话就采取循环去自己处理
                return arr.indexOf(item);
            }else{
                for (var i = 0; i < arr.length; i++){
                    if (arr[i] === item){
                        return i;
                    }
                }
            }
        }
        indexOf(arr,3);
    </script>

    数组求和

    <script>
        var arr = [1,2,3,6,8];
        function sum(arr) {
                var n = 0;
                for (var i = 0; i < arr.length; i++){
                    n += arr[i];
                }
                return n;
        }
        console.log(sum(arr)); //20
    </script>

    移除指定元素

    <script>
        // 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
        var arr = [1,2,3,6,8];
        function remove(arr,item) {
            var n = 0;
            var arr1 = [];
            for (var i = 0; i < arr.length; i++){
                if (arr[i]!= item){
                    arr1.push(arr[i]);
                }
            }
            return arr1;
        }
        console.log(remove(arr,3)); //
    
        //移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
        var arr = [1,2,3,6,8];
        function remove(arr,item) {
            for (var i = 0; i < arr.length; i++){
                if (arr[i] === item){
                    arr.splice(i,1);
                    i--;
                }
            }
            return arr;
        }
        console.log(remove(arr,3)); //
    
    </script>

    添加和删除元素

    <script>
        //在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
        var arr = [1,2,3,6,8];
        function append(arr,item) {
            var arr1 = arr.slice(0);
            arr1.push(item);
            return arr1;
        }
        console.log(append(arr,3)); //
    
        //删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
        var arr = [1,2,3,6,8];
        function del(arr) {
            var arr1 = arr.slice(0);
            arr1.pop();
            return arr1;
        }
        console.log(del(arr)); //
    
        //在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
            var arr = [1,2,3,6,8];
            function append(arr,item) {
                var arr1 = arr.slice(0);
                arr1.unshift(item);
                return arr1;
            }
            console.log(append(arr,3)); //
    
        //删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
            var arr = [1,2,3,6,8];
            function del(arr) {
                var arr1 = arr.slice(0);
                arr1.shift();
                return arr1;
            }
            console.log(del(arr)); //
    
        //合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
        var arr1 = [1, 2, 3, 4];
        var arr2 = ['a', 'b', 'c', 1];
        function concat( ) {
            var arr = arr1.concat(arr2);
            return arr;
        }
        console.log(concat(arr1,arr2));
    
        //在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
        var arr = [1, 2, 3, 4];
        function insert(arr, item, index) {
                var arr1 = arr.slice(0);
                arr1.splice(index,0,item);
                return arr1;
        }
        console.log(insert(arr,5,2));  // 1,2,5,3,4
    
    
    </script>

    数组或字符串去重

    <script>
    //第一种
        var str = "abcdedddffhssjssjssksk";
        var arr = str.split("");
    //    var arr = ['ss','ss','aa','aa','b','f'];
        Array.prototype.unique = function () {
            var temp = {};
            var arr = [];
            var len = this.length;
            for (var i = 0; i < len; i++) {
                if (!temp[this[i]]) {
                    temp[this[i]] = 'a';//如果里面没有这个属性名的话,就添加进去
                    arr.push(this[i]);
                }
            }
            return arr.join('');
        }
    
    //第二种
    //        问题:编写一个方法去掉一个数组中的重复元素。
    //        分析:创建一个新数组,循环遍历,只要新数组中有老数组的值,就不用再添加了。
            var arr = [1,2,3,4,5,2,3,4];
            console.log(arr);
            var aaa = fn(arr);
            console.log(aaa);
            //思路:创建一个新数组,循环遍历,只要新数组中有老数组的值,就不用再添加了。
            function fn(array){
                var newArr = [];
                for(var i=0;i<array.length;i++){
                    //开闭原则
                    var bool = true;
                    //每次都要判断新数组中是否有旧数组中的值。
                    for(var j=0;j<newArr.length;j++){
                        if(array[i] === newArr[j]){
                            bool = false;
                        }
                    }
                    if(bool){
                        newArr[newArr.length] = array[i];
                    }
                }
                return newArr;
            }
     
    //第三种
    function duplicates(arr) {
         var a = [],b = [];
         //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
         for(var i = 0; i < arr.length; i++){
             if(!b[arr[i]]){
                 b[arr[i]] = 1;
                 continue;
             }
             b[arr[i]]++;
         }
         //遍历b数组,将其中元素值大于1的元素下标存入a数组中
         for(var i = 0; i < b.length; i++){
             if(b[i] > 1){
                 a.push(i);
             }
         }
         return a;
    }
        </script>
  • 相关阅读:
    hibernate持久化框架
    spring之AOP
    spring之bean
    spring之IOC
    pdf文件工具typora
    vsCode写vue项目一键生成.vue模板
    微信小程序瀑布流
    小程序接入阿拉丁
    小程序引入背景图片不显示问题解决
    Mac OS下使用rz和sz
  • 原文地址:https://www.cnblogs.com/markniefeng/p/10561861.html
Copyright © 2020-2023  润新知