我有一个数组数组,即[[3, 6, 7, 7, 4], [5, 9], [4, 1, 6], [6, 3, 6], [5, 7, 8, 9]]
。我希望根据间隔来组合这些数组。例如,如果间隔为2,我希望将这些数组中的前两个数组合并为一个数组,然后将下两个数组合并为下一个数组,然后将第三个两个数组合并为下一个数组,依此类推。
我一直在摆弄concat
,就是想不出如何实现我想要的东西。我们非常感谢您的帮助,谢谢您的帮助!
发布于 2019-10-15 13:11:00
如果使用forEach
或reduce
遍历外部数组,则可以通过将索引除以间隔将其附加到新结果数组的相应内部数组中:
let arr = [
[3, 6, 7, 7, 4],
[5, 9],
[4, 1, 6],
[6, 3, 6],
[5, 7, 8, 9]
]
// combine using forEach
function combine(a, interval) {
const res = [];
a.forEach((subA, ii) => {
const i = Math.floor(ii / interval); // index of combined array in outer array
res[i] = (res[i] || []).concat(subA); // (create if not existant yet,) append
});
return res;
}
// combine using reduce
function combineR(a, interval) {
return a.reduce((res, subA, ii) => {
const i = Math.floor(ii / interval); // index of combined array in outer array
res[i] = (res[i] || []).concat(subA); // (create if not existant yet,) append
return res;
}, []);
}
console.log(combineR(arr, 3));
发布于 2019-10-15 06:34:17
试试这个:
let arr = [[3, 6, 7, 7, 4], [5, 9], [4, 1, 6], [6, 3, 6], [5, 7, 8, 9]]
function combine(interval, arr){
let rtrn = [];
let currentArr=[];
for(let i=0;i<arr.length;i++){
if(i>0 && i%interval===0){
rtrn.push(currentArr);
currentArr = [];
}
currentArr = currentArr.concat(arr[i]);
}
rtrn.push(currentArr);
return rtrn;
}
console.log(combine(2,arr));
发布于 2019-10-15 06:42:48
这是另一个混乱的解决方案:)
test = [[3, 6, 7, 7, 4], [5, 9], [4, 1, 6], [6, 3, 6], [5, 7, 8, 9]];
function concat_arrays(arr, interval) {
concatenated = [];
for (i = 0; i < arr.length; i += interval) {
con = test[i];
for (j = 1; j < interval && i + j < arr.length; j++) {
con = con.concat(arr[i+j]);
}
concatenated.push(con);
}
console.log(concatenated);
}
concat_arrays(test, 3);
https://stackoverflow.com/questions/58384686
复制相似问题