zoukankan      html  css  js  c++  java
  • JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat

    我们有两个这样的数组

    var arr1 = [1,2,3];
    var arr2 = [4,5,6];

    任务:合并成这样,请至少提供两种思路。

    var arr1 = [1,2,3,4,5,6];

    思路一:我们可以把第二个数组里面的值挨个添加到第一个数组的末尾。

    1:数组怎么添加内容 ?[] || push || shift

    2:怎么向数组最后一个索引添加值? push || [数组.length]

    3:怎么挨个向数组一添加内容? for

    4: for循环多少次? 你要添加多少就循环多少次,也就是arr2的长度

    5: 要添加什么内容?arr2里面的值,怎么获取,arr[?]

    代码实现:

    var arr1 = [1,2,3];
    var arr2 = [4,5,6];
    for(var i=0;i<arr2.length;i++){
        arr1.push(arr2[i]);
    }
    console.log(arr1);  //[1, 2, 3, 4, 5, 6]

    问题来了,原生js提供的concat方法不会修改原数组(arr1)的内容,而是返回一个新数组。

    分析:既然是要返回值,那我们可以定义一个函数,然后再定义一个变量,这个变量来接收我们添加好的值,但是我们会一个问题,那就是不能在arr1上面push内容了,不然还是会修改原数组的内容。于是我觉得要把原数组复制一份,但是又有一个问题,就是对象是引用类型,简单来说虽然我们可以把数组1复制到一个变量中,但是如果我用push或者[]的形式修改里面的值,或者添加,那么我们的原数组也会被修改,(如果你不知道什么是引用类型,可以去看我博客的第一页或者在第二页)这不是我们想要的结果,但是我们必须复制一份arr1。此时你有什么解决方法?

    解决数组引用问题:

    for(var i=0;i<arr1.length;i++){
        arr3[i] = arr1[i];
    }

    我的思路是把数组1的值挨个的添加到arr3这个数组中,此时的arr3是这样的

    console.log(arr3) //[1, 2, 3]

    任务:在这个新的数组arr3中添加arr2的所以值,方法和第一步一样,如果忘记了回头看看。

    代码实现:

    var arr1 = [1,2,3];
    var arr2 = [4,5,6];
    var arr3 = [];
    for(var i=0;i<arr1.length;i++){
        arr3[i] = arr1[i];
    }
    for(var i=0;i<arr2.length;i++){
        arr3.push(arr2[i]);
    }
    console.log(arr3);

    问题:虽然这个已经实现了数组的合并,但是我每次合并都要重新写一份,那样太麻烦,于是我们得想个办法把它封装成一个函数,下次我们要用的时候调用它就行。

    var arr1 = [1,2,3];
    var arr2 = [4,5,6,7];
    function Concat(arr1,arr2){
        var arr3 = [];
        for(var i=0;i<arr1.length;i++){
            arr3[i] = arr1[i];
        }
        for(var i=0;i<arr2.length;i++){
            arr3.push(arr2[i]);
        }
        return arr3;
    }
    console.log(Concat(arr1,arr2));

    思路二:

    分析:把arr1和arr2都转换成字符串,然后将这两段字符串相加得到一个组合,然后再把这个字符串转成数组。

    代码实现:

    var arr1 = [1,2,3];
    var arr2 = [4,5,6,7,8,9];
    var arr3 = (arr1.join(",")+","+arr2.join(",")).split(",");

    出了点小问题,这个这个数组里面的值是字符串了。

    ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

    解决思路:遍历这个数组,挨个把他们转换成数字。

    var arr1 = [1,2,3];
    var arr2 = [4,5,6,7,8,9];
    var arr3 = (arr1.join(",")+","+arr2.join(",")).split(",");
    for(var i=0;i<arr3.length;i++){
        arr3[i] = +arr3[i];
    }
    console.log(arr3);

    ok

    课外扩展:继承版

    var arr1 = [1,2,3];
    var arr2 = [4,5,6,7,8,9];
    Array.prototype.Concat = function(arr){
        var arr3 = [];
        for(var i=0;i<this.length;i++){
            arr3[i] = this[i];
        }
        for(var i=0;i<arr.length;i++){
            arr3.push(arr[i]);
        }
        return arr3;
    }
    
    console.log(arr1.Concat(arr2));

    完。

    如果对本系列文章有好的建议,欢迎提出。

  • 相关阅读:
    GoldenGate Studio 12.2.1.1发布
    重构-改善既有代码的设计完整笔记系列之8
    重构-改善既有代码的设计完整笔记系列之6、7
    Java多线程开发系列-线程管理
    Java多线程开发系列-线程活性故障
    Java多线程开发系列-线程间协作
    Java多线程开发系列-基础
    了不起的Java-CompletableFuture组合异步编程
    了不起的Java-Optional替代null处理
    了不起的Java-Lambda替代设计模式
  • 原文地址:https://www.cnblogs.com/pssp/p/5247206.html
Copyright © 2011-2022 走看看