合并两个数组,使值交替

IT技术 javascript jquery arrays merge
2021-02-07 15:42:04

我正在寻找一种 jQuery 方法来合并两个数组,以便它们的值交替:

var array1 = [1,2,3,4,5];
var array2 = ['a', 'b', 'c', 'd', 'e'];

我想要的结果是:

var arrayCombined = [1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e'];

请注意,我知道在 JS 中执行此操作是微不足道的,但是我正在使用 jQuery 方法来执行此操作。

5个回答

您可以使用以下map方法:

var array1 = [1, 2, 3, 4, 5];
var array2 = ['a', 'b', 'c', 'd', 'e'];

var arrayCombined = $.map(array1, function(v, i) {
  return [v, array2[i]];
});

console.log(arrayCombined);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

演示:http : //jsfiddle.net/Guffa/hmUy6/

像@GalTalmor 这样的数组版本:combined = arraysArray.reduce((t, u, v, w) => u.reduce((x, y, z) => (x[z * w.length + v] = y, x), t), []);它很快!jsben.ch/2ZIGk
2021-03-14 15:42:04
我已经概括了 @jAndy 的代码以支持要合并的数组数组。这是用 ES6 编写的:combined = arraysArray[0].map((v, i) => arraysArray.reduce((a, b) => a.concat(b[i]), [])).reduce((a, b) => a.concat(b), []);.
2021-03-17 15:42:04
感谢您实际回答问题,而不是对如何在没有 jQuery 的情况下做到这一点大惊小怪。
2021-03-20 15:42:04
var arrayCombined = array1.map(function(v,i) { return [v, array2[i]]; }).reduce(function(a,b) { return a.concat(b); }); 对于 ES5-vanilla JS
2021-04-03 15:42:04
+1 用于在 jsfiddle 中添加链接,我首先通过 jsfiddle 找到它
2021-04-07 15:42:04

如果您必须使用 jQuery,您可以利用其损坏的$.map实现。

var result = $.map(array1, function(v, i) {
                                return [v, array2[i]];
                           });

jQuery$.map会展平返回的数组,为您提供所需的结果。

演示: http : //jsfiddle.net/8rn2w/


纯JS解决方案:

var result = array1.reduce(function(arr, v, i) {
                              return arr.concat(v, array2[i]); 
                           }, []);

演示: http : //jsfiddle.net/8rn2w/1/

@JanDvorak:你比我亲切多了。:)
2021-03-16 15:42:04
@JanDvorak:是的,但 IMO 仍然损坏。
2021-03-23 15:42:04
它已记录在案,因此它不是错误
2021-03-25 15:42:04

使用Array.prototype.flat()Array.prototype.map() 的另一种解决方案

var array1 = [1, 2, 3, 4, 5];
var array2 = ['a', 'b', 'c', 'd', 'e'];

var result = array1.map(
  (element, index) => [element, array2[index]]
).flat();

console.log(result);

这现在可以一步完成Array.prototype.flatMap()(有不同的支持)
2021-04-04 15:42:04
注意:Array.prototype.flat() 需要 Node.js 11.0.0 或更高版本。
2021-04-11 15:42:04

尝试这样的事情:

function merge(array1, array2) {
  if (array1.length == array2.length) {
    var c = [];
    for (var i = 0; i < array1.length; i++) {
      c.push([array1[i], array2[i]]);
    }
    return c;
  }
  return null;
}
没有抱怨或任何事情,但这可以通过不同长度的数组轻松完成。
2021-03-18 15:42:04
要匹配指定的格式,您应该更改c.push([array1[i], array2[i]])c.push(array1[i], array2[i])
2021-03-19 15:42:04
是的,这绝对可以做到,但我首先想到的是这个,所以尝试过!!!
2021-03-25 15:42:04
没有足够的 jQuery(啊,终于我有充分的理由这么说)。
2021-04-09 15:42:04

对于那些通过搜索引擎到达这里并想要 Lodash 选项的人:

_.compact(_.flatten(_.zip(array1, array2)))