search

Home  >  Q&A  >  body text

javascript如何合并多个数组

如题,已有两个数组

var array1 = ["a", "b"];
var array2 = ["c", "d"];

我要合并后变成下面这样:

var array= ["a", "b", "c", "d"];

应该用什么方法呢?

怪我咯怪我咯2894 days ago574

reply all(3)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 12:45:25

    这里给出新的例子

    var arr1 = ['a'];
    var arr2 = ['b', 'c'];
    var arr3 = ['c', ['d'], 'e', undefined, null];

    代码段中修改部分前面以星号(*)标记出。

    基本

    执行:arr1.concat(arr2, arr3);
    返回:[ 'a', 'b', 'c', 'c', [ 'd' ], 'e', undefined, null ]

    考虑重复

    var concat = (function(){
      // concat arr1 and arr2 without duplication.
      var concat_ = function(arr1, arr2) {
        for (var i=arr2.length-1;i>=0;i--) {
          arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0;
        }
      };
      // concat arbitrary arrays.
      // Instead of alter supplied arrays, return a new one.
      return function(arr) {
        var result = arr.slice();
        for (var i=arguments.length-1;i>=1;i--) {
          concat_(result, arguments[i]);
        }
        return result;
      };
    }());

    执行:concat(arr1, arr2, arr3);
    返回:[ 'a', null, undefined, 'e', [ 'd' ], 'c', 'b' ]

    处理undefined和null

    这里的undefined可能由数组本身存在的undefined元素引起,也可能由于delete引起。

    var concat = (function(){
      // concat arr1 and arr2 without duplication.
      var concat_ = function(arr1, arr2) {
        for (var i=arr2.length-1;i>=0;i--) {
    *      if (arr2[i] === undefined || arr2[i] === null) {
    *        continue;
    *      }
          arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0;
        }
      };
      // concat arbitrary arrays.
      // Instead of alter supplied arrays, return a new one.
      return function(arr) {
        var result = arr.slice();
        for (var i=arguments.length-1;i>=1;i--) {
          concat_(result, arguments[i]);
        }
        return result;
      };
    }());

    执行:concat(arr1, arr2, arr3);
    返回:[ 'a', 'e', [ 'd' ], 'c', 'b' ]

    执行:delete arr3[2]; concat(arr1, arr2, arr3);
    返回:[ 'a', [ 'd' ], 'c', 'b' ]

    考虑数组

    var concat = (function(){
      // concat arr1 and arr2 without duplication.
      var concat_ = function(arr1, arr2) {
        for (var i=arr2.length-1;i>=0;i--) {
    *      // escape undefined and null element
    *      if (arr2[i] === undefined || arr2[i] === null) {
    *        continue;
    *      }
    *      // recursive deal with array element
    *      // can also handle multi-level array wrapper
    *      if (classof(arr2[i]) === 'Array') {
    *        for (var j=arr2[i].length-1;j>=0;j--) {
    *          concat_(arr1, arr2[i][j]);
    *        }
    *        continue;
    *      }
          arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0;
        }
      };
      // concat arbitrary arrays.
      // Instead of alter supplied arrays, return a new one.
      return function(arr) {
        var result = arr.slice();
        for (var i=arguments.length-1;i>=1;i--) {
          concat_(result, arguments[i]);
        }
        return result;
      };
    }());

    执行:concat(arr1, arr2, arr3)
    返回:[ 'a', 'd', 'c', 'b' ]
    该代码也能够处理多层数组的解析。

    注意

    Native Javascript的concat操作并不改变原始数组,因此在上面提供的方案中,也不对原数组进行修改,而是返回新的数组。
    在github上创建了gist,欢迎修改指正。https://gist.github.com/4167036

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 12:45:25

    var merge = function() {
        return Array.prototype.concat.apply([], arguments)
      }
    
    merge([1,2,4],[3,4],[5,6]);
    //[1, 2, 4, 3, 4, 5, 6]

    另外,最好加个去重处理,像上面的例子会处理重复元素。

    reply
    0
  • PHPz

    PHPz2017-04-10 12:45:25

    concat

    (这段是凑字数的,请忽略。)

    reply
    0
  • Cancelreply