【问题标题】:jQuery - merge two arrays with alterationjQuery - 合并两个数组并进行更改
【发布时间】:2011-10-31 17:06:55
【问题描述】:

我试图找到最简单的方法将两个数组合并到第三个数组中,使用 jQuery,如下所示:

[A,B,C,D]
[1,2,3,4]

答案是:

[A,1,B,2,C,3,D,4]

另一个例子:

[A,B,C] + [1,2,3,4,5] = [A,1,B,2,C,3,4,5]
[A,B,C,D] + [1,2,3] = [A,1,B,2,C,3,D]

【问题讨论】:

  • 它们总是一样长吗?
  • 一个数组比另一个数组长应该怎么办?
  • @MattBall 我正在使用 nth-child 排序和一些丑陋的计算:)
  • @arnaud576875 [A,B] + [1,2,3,4] = [A,1,B,2,3,4]

标签: javascript jquery arrays sorting merge


【解决方案1】:

使用 jquery 的另一种方法是:

var a = [1,2,3,4];
var b = ['a','b','c'];
var merged_array = mergeArray([a,b]);

function mergeArrays(arrayOfArray) {
    var result = []; 
    for (var i = 0; i < arrayOfArray.length;i++ ) {
        $.merge(result, arrayOfArray[i]);
    }
    return result;
}

这样您可以合并任意数量的数组,而不必担心单个数组的大小。

希望这也能有所帮助。

【讨论】:

    【解决方案2】:

    您可以使用jQuery.map()[docs] 方法直接创建一个数组。当您返回一个数组时,jQuery.map 会执行 .concat()

    当长度不同时,这也可以防止数组中出现空洞。

    http://jsfiddle.net/zbCj7/

    var chars = ['A','B','C','D'];
    var nums = [1,2,3,4];
    
    var res = $.map( chars.length > nums.length ? chars : nums, function(v,i) {
        var chr = chars[i];
        var num = nums[i];
        if( chr !== undefined && num !== undefined ) {
            return [chr,num];
        } else if( chr === undefined ) {
            return num;
        } else {
            return chr;
        }
    });
    

    或者更简洁一点:

    http://jsfiddle.net/zbCj7/1/

    var chars = ['A','B','C','D'];
    var nums = [1,2];
    
    var res = $.map( chars.length > nums.length ? chars : nums, function(v,i) {
        var chr = chars[i];
        var num = nums[i];
        return ( chr !== undefined && num !== undefined ) ?
            [chr,num] : ( chr === undefined ) ? num : chr;
    });
    

    如果你真的想让它简洁,你可以这样做:

    http://jsfiddle.net/zbCj7/2/

    var chars = ['A','B','C','D'];
    var nums = [1,2];
    
    var res = $.map( chars.length > nums.length ? chars : nums, function(v,i) {
        return [ chars[i], nums[i] ].slice( chars[i]===undefined,
                                            nums[i]===undefined || 2 );
    });
    

    【讨论】:

      【解决方案3】:
      var result = [];
      var a = ['A','B','C','D'];
      var b = [1,2,3,4];
      
      $.each(a, function (index, value) {
          result.push(value);
          result.push(b[index]);
      });
      

      在这里试试:http://jsfiddle.net/GcTx7/3/

      没有 jQuery:

      for (var i = 0, l = a.length; i < l; ++i) {
          result.push(a[i], b[i]);
      }
      

      这个解决了两个数组长度不同的情况:

      for (var i = 0, l = Math.max(a.length, b.length); i < l; ++i) {
          if (i < a.length) result.push(a[i]);
          if (i < b.length) result.push(b[i]);
      }
      

      http://jsfiddle.net/GcTx7/1/

      【讨论】:

      • 如果a.length &gt; b.length 这会将undefineds 推入result,我强烈怀疑这是期望的行为。
      • 这是未定义的行为 :)
      • 伟大的开始。谢谢!你能帮忙处理不同长度的数组吗?
      • 添加了不同长度的处理
      • 使用正确的通用$.each()。不支持将非元素数组传递给 $() 的行为。
      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多