一次合并三个元素的两个Javascript数组

一次合并三个元素的两个Javascript数组,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,给定数组arr1、arr2和newArr(例如): 我试图将两个数组(arr1和arr2)组合成一个数组(newArr),这样newArr从arr1中获取第一个(最多)三个元素,然后从arr2中获取第一个(最多)三个元素,然后从arr1中获取下一个(最多)三个元素,等等 我最初是通过遍历arr1的每个元素,检查索引是否可以被3整除(for(var I=0)…if(I+1%3==0)),但现在我认为当arr1.length%3!==0 还有,这种合并过程有名字吗?那么 var arr1 = ["a

给定数组
arr1
arr2
newArr
(例如):

我试图将两个数组(
arr1
arr2
)组合成一个数组(
newArr
),这样
newArr
arr1
中获取第一个(最多)三个元素,然后从
arr2
中获取第一个(最多)三个元素,然后从
arr1
中获取下一个(最多)三个元素,等等

我最初是通过遍历
arr1
的每个元素,检查索引是否可以被3整除(
for(var I=0)
if(I+1%3==0)
),但现在我认为当
arr1.length%3!==0

还有,这种合并过程有名字吗?

那么

var arr1 = ["a1", "a2", "a3", "a4", "a5"]
var arr2 = ["b1", "b2", "b3", "b4", "b5"]
newArr = []
t1 = t2 = temp = []

while(arr1.length) {
  t1 = arr1.splice(0,3)
  t2 = arr2.splice(0,3)
  temp = t1.concat(t2)
  newArr = newArr.concat(temp)
}
console.log(newArr)
那么

var arr1 = ["a1", "a2", "a3", "a4", "a5"]
var arr2 = ["b1", "b2", "b3", "b4", "b5"]
newArr = []
t1 = t2 = temp = []

while(arr1.length) {
  t1 = arr1.splice(0,3)
  t2 = arr2.splice(0,3)
  temp = t1.concat(t2)
  newArr = newArr.concat(temp)
}
console.log(newArr)

对不起,你有时间谈谈我们的主和救世主,递归吗

/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 */
function threeMerge(arr1, arr2) {

    /**
    * @param {number[]} arr1
    * @param {number[]} arr2
    * @param {number[]} currentArr
    */
    var threeMergeRecursive = function(arr1, arr2, currentArr) {
        if(arr1.length < 3 || arr2.length < 3){
            return currentArr.concat(arr1, arr2);
    } else if (arr2.length < 3) {
        var resultArr = currentArr.concat(
            arr1.slice(0, 3),
            arr2
        );

        return threeMergeRecursive(
            arr1.slice(0, 3),
            [],
            resultArr
        );
    } else {
            var resultArr = currentArr.concat(
                arr1.slice(0, 3),
                arr1.slice(0, 3)
                );

            return threeMergeRecursive(
                arr1.slice(3),
                arr2.slice(3),
                resultArr);
        }
    };

    return(threeMergeRecursive(arr1, arr2, []));
};
/**
*@param{number[]}arr1
*@param{number[]}arr2
*/
函数threeMerge(arr1、arr2){
/**
*@param{number[]}arr1
*@param{number[]}arr2
*@param{number[]}currentArr
*/
var threeMergeRecursive=函数(arr1、arr2、currentArr){
如果(arr1.length<3 | | arr2.length<3){
返回电流arr.concat(arr1,arr2);
}否则如果(arr2.length<3){
var resultar=currentArr.concat(
arr1.切片(0,3),
arr2
);
返回递归(
arr1.切片(0,3),
[],
结果者
);
}否则{
var resultar=currentArr.concat(
arr1.切片(0,3),
arr1.切片(0,3)
);
返回递归(
arr1.切片(3),
arr2.切片(3),
结果者);
}
};
返回(三个递归(arr1,arr2,[]);
};

对不起,你有时间谈谈我们的主和救世主,递归吗

/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 */
function threeMerge(arr1, arr2) {

    /**
    * @param {number[]} arr1
    * @param {number[]} arr2
    * @param {number[]} currentArr
    */
    var threeMergeRecursive = function(arr1, arr2, currentArr) {
        if(arr1.length < 3 || arr2.length < 3){
            return currentArr.concat(arr1, arr2);
    } else if (arr2.length < 3) {
        var resultArr = currentArr.concat(
            arr1.slice(0, 3),
            arr2
        );

        return threeMergeRecursive(
            arr1.slice(0, 3),
            [],
            resultArr
        );
    } else {
            var resultArr = currentArr.concat(
                arr1.slice(0, 3),
                arr1.slice(0, 3)
                );

            return threeMergeRecursive(
                arr1.slice(3),
                arr2.slice(3),
                resultArr);
        }
    };

    return(threeMergeRecursive(arr1, arr2, []));
};
/**
*@param{number[]}arr1
*@param{number[]}arr2
*/
函数threeMerge(arr1、arr2){
/**
*@param{number[]}arr1
*@param{number[]}arr2
*@param{number[]}currentArr
*/
var threeMergeRecursive=函数(arr1、arr2、currentArr){
如果(arr1.length<3 | | arr2.length<3){
返回电流arr.concat(arr1,arr2);
}否则如果(arr2.length<3){
var resultar=currentArr.concat(
arr1.切片(0,3),
arr2
);
返回递归(
arr1.切片(0,3),
[],
结果者
);
}否则{
var resultar=currentArr.concat(
arr1.切片(0,3),
arr1.切片(0,3)
);
返回递归(
arr1.切片(3),
arr2.切片(3),
结果者);
}
};
返回(三个递归(arr1,arr2,[]);
};

基本解决方案是同时使用两个索引进行循环。 这是解决办法

var arr1 = ["a1", "a2", "a3", "a4", "a5"],
    arr2 = ["b1", "b2", "b3", "b4", "b5"],
    newArr = [];

for (let a=0, b=0; a<arr1.length || b<arr2.length; ) {
  if (a==b) {
    newArr.push(...arr1.slice(a,a+=3)) }
  else {
    newArr.push(...arr2.slice(b,b+=3)) }
}
var arr1=[“a1”、“a2”、“a3”、“a4”、“a5”],
arr2=[“b1”、“b2”、“b3”、“b4”、“b5”],
newArr=[];

对于(假设a=0,b=0;a基本解决方案是同时使用两个索引进行循环。 这是解决办法

var arr1 = ["a1", "a2", "a3", "a4", "a5"],
    arr2 = ["b1", "b2", "b3", "b4", "b5"],
    newArr = [];

for (let a=0, b=0; a<arr1.length || b<arr2.length; ) {
  if (a==b) {
    newArr.push(...arr1.slice(a,a+=3)) }
  else {
    newArr.push(...arr2.slice(b,b+=3)) }
}
var arr1=[“a1”、“a2”、“a3”、“a4”、“a5”],
arr2=[“b1”、“b2”、“b3”、“b4”、“b5”],
newArr=[];

对于(让a=0,b=0;a你的数组长度相同吗?你能通过使用真正不同的输入数组更清楚吗?是的-我的数组长度相同。我将编辑我的代码片段以更好地区分数组。这种合并过程有名称吗?好的,有时会调用除法;使用这个问题和
concat
ting结果你的数组长度是否相同?使用不同的输入数组是否更清晰?是的-我的数组长度相同。我将编辑我的代码片段以更好地区分数组。这种合并过程有名称吗?好的,有时称为除法;使用该问题和
concat整理结果应该会让你达到你想要的目的。这种方法与我最终采用的方法最为相似-保持简单。谢谢!这种方法与我最终采用的方法最为相似-保持简单。谢谢!