Javascript 如何每隔2个项目交替连接阵列?JS

Javascript 如何每隔2个项目交替连接阵列?JS,javascript,Javascript,我有: 我让阵列的concat工作,但一次只能有一个: var alternatingArrayResult = [array1, array2].reduce(function (r, a) { return a.forEach(function (a, i) { return (r[i] = r[i] || []).push(a); }),

我有:

我让阵列的concat工作,但一次只能有一个:

var alternatingArrayResult = [array1, array2].reduce(function (r, a) {
                        return a.forEach(function (a, i) {
                            return (r[i] = r[i] || []).push(a);
                        }), r;
                    }, []).reduce(function (a, b) {
                        return a.concat(b);
                    });

// => alternatingArrayResult = [1, 'a', 2, 'b', 3, 'c', 4, 5, 6, 7, 8, 9];
我想从数组1添加两个项,然后从数组2添加一个项,依此类推

期望输出:

var array1=[1,2,3,4,5,6,7,8,9]; 变量array2=['a','b','c']; var alternatingResultArray=[array1,array2]。还原函数r,a{ 返回a.foreacha函数,i{ 返回r[i]=r[i]| |[]pusha; },r; },[]还原函数a,b{ 返回a.concatb; };
console.logalternatingResultArray 您可以获得一个长度,并迭代推送零件

常数 数组1=[1,2,3,4,5,6,7,8,9], 数组2=['a','b','c'], 结果=[]; 对于i=0,l=Math.maxMath.ceilarray 1.length/2,array2.length;i控制台。日志…结果 您可以获得一个长度,并迭代推送零件

常数 数组1=[1,2,3,4,5,6,7,8,9], 数组2=['a','b','c'], 结果=[]; 对于i=0,l=Math.maxMath.ceilarray 1.length/2,array2.length;i thisArg在执行回调时用作此参数的可选值

设数组1=[1,2,3,4,5,6,7,8,9]; 设array2=['a','b','c']; 设arrayConcatted=array1 .平面地图功能{ //^not箭头将此参数保留在范围内 常量arr2Value=i&&i%2==0&&this.length&&this.shift; 返回arr2Value?[arr2Value,v]:v; },array2.slice //^“这”,一份array2的副本 console.logJSON.stringifyarrayConcatted; //即 var Arracatie=[]; var arr2Clone=array2.slice; 对于var i=0;i<1.长度;i+=1{ 常量arr2Value=i&&i%2==0&&arr2Clone.length&&arr2Clone.shift; 如果arr2Value{ arrconatie.pusharr2值; } Arracatie.pusharray1[i]; } console.logJSON.stringifyarrConcatIE 将Array.map与thisArg一起使用可获得所需结果

thisArg在执行回调时用作此参数的可选值

设数组1=[1,2,3,4,5,6,7,8,9]; 设array2=['a','b','c']; 设arrayConcatted=array1 .平面地图功能{ //^not箭头将此参数保留在范围内 常量arr2Value=i&&i%2==0&&this.length&&this.shift; 返回arr2Value?[arr2Value,v]:v; },array2.slice //^“这”,一份array2的副本 console.logJSON.stringifyarrayConcatted; //即 var Arracatie=[]; var arr2Clone=array2.slice; 对于var i=0;i<1.长度;i+=1{ 常量arr2Value=i&&i%2==0&&arr2Clone.length&&arr2Clone.shift; 如果arr2Value{ arrconatie.pusharr2值; } Arracatie.pusharray1[i]; }
console.logJSON.stringifyarrConcatIE;这种模式背后的逻辑是什么?这些字母总是用两个数字隔开吗?如果有两个字母,但只有一个数字呢?模式背后的逻辑是什么?这些字母总是用两个数字隔开吗?如果有两个字母,但只有一个数字怎么办?谢谢,这似乎很有效,但我正试图找出如何使IE11友好-扩展运算符对此不合适,你有什么建议吗?你可以选择Array.prototype.push.applyresult,array1.slicei*2,I+1*2以及第二个数组。谢谢,这似乎是可行的,但我正试图找出如何使IE11友好-扩展运算符对此不合适,你有什么建议吗?你可以使用Array.prototype.push.applyresult,array1.slicei*2,I+1*2以及第二个数组。你可以直接使用flatMap。谢谢,这似乎是可行的,但我正在想办法让这个IE11变得友好-,公寓不适合这样。似乎很合适,但我似乎无法使它与您的代码一起工作。你有什么建议吗?添加了一个与IE兼容的解决方案。你可以直接使用flatMap。谢谢你,这似乎可行,但我正在试图找出如何使这个IE11友好-。对于这个,flat是不合适的。似乎很合适,但我似乎无法使它与您的代码一起工作。您有什么建议吗?添加了与IE兼容的解决方案。
var alternatingArrayResult = [array1, array2].reduce(function (r, a) {
                        return a.forEach(function (a, i) {
                            return (r[i] = r[i] || []).push(a);
                        }), r;
                    }, []).reduce(function (a, b) {
                        return a.concat(b);
                    });

// => alternatingArrayResult = [1, 'a', 2, 'b', 3, 'c', 4, 5, 6, 7, 8, 9];
result = [1, 2, 'a', 3, 4, 'b', 5, 6, 'c', 7, 8, 9];