一次合并三个元素的两个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代码>整理结果应该会让你达到你想要的目的。这种方法与我最终采用的方法最为相似-保持简单。谢谢!这种方法与我最终采用的方法最为相似-保持简单。谢谢!