将数组相乘的DRYing函数

时间:2018-08-28 05:37:26

标签: javascript arrays for-loop dry

我有一个由100个元素组成的数组,为了将原来的100个元素四倍变为400个数组,我将其分成10个较小的数组。

我当前正在使用:

function quadulator(arrChunks){
let a = []; 
let b = [];

    for(var i = 0; i< arrChunks.length;++i){
        a.push(arrChunks[i]);
        a.push(arrChunks[i]);
        b.push(arrChunks[i]);
        b.push(arrChunks[i]);
}  

return a.concat(b);

}
let group1 = quadulator(grid100[0]);
let group2 = quadulator(grid100[1]);
let group3 = quadulator(grid100[2]);
let group4 = quadulator(grid100[3]);
let group5 = quadulator(grid100[4]);
let group5 = quadulator(grid100[5])

let newArr = group1.concat(group2,group3,group4,group5);

这完全符合我的要求,但是我正在寻找消除重复的方法。

之所以将其拆分为多个部分,是因为我需要原始数组中索引为0的元素,以便在新数组的索引0、1、20和21以及每个数组中重复自身遵循这种模式的其他元素。

1 个答案:

答案 0 :(得分:0)

您可以通过注意quadulatora相同来改进b功能。您可以一次创建一个单独的数组,用Array.from表示两个数组,然后将该数组传播两次。

然后,用您的group,可以使用map函数来quadulator grid100,并将其展开到[].concat中以进行展平:

function quadulator(arrChunks) {
  const chunksDoubled = Array.from(
    { length: arrChunks.length * 2 },
    (_, i) => arrChunks[Math.floor(i / 2)]
  );
  return [...chunksDoubled, ...chunksDoubled];
}
const newArr = [].concat(...grid100.map(quadulator));

演示:

const grid100 = [
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9, 10, 11, 12],
  [13, 14, 15, 16]
];
function quadulator(arrChunks) {
  const chunksDoubled = Array.from(
    { length: arrChunks.length * 2 },
    (_, i) => arrChunks[Math.floor(i / 2)]
  );
  return [...chunksDoubled, ...chunksDoubled];
}
const newArr = [].concat(...grid100.map(quadulator));
console.log(newArr);