固定长度的组合不同数组

时间:2020-05-15 07:00:31

标签: javascript arrays angularjs typescript

如果我的Array1是

Array1 = [1,2,3,4,5,6,7,8,9,10] 

结果应与Combined_Array = [1,2,3,4,5,6,7,8,9,10]相同

如果我有

Array2=[11,12,13,14,15,16,17,18,19,20]

Resut应该为Combined_Array = [1,2,3,4,5,11,12,13,14,15]

如果我再次得到

Array3=[21,22,23,24,25,26,27,28,19,30]

The Combined_array = [1,2,3,11,12,13,21,22,23,24]

以此类推,我想要多少个数组都没有关系,它应该从固定长度的所有不同数组中给我一个Combined_Array

需要一个功能来使其正常工作。

2 个答案:

答案 0 :(得分:0)

您需要考虑很多极端情况(如果结果数组长度超过给定的数组数,如果给定的数组长度不同,依此类推)。 这将适用于简单的情况:

const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const arr2 = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
const arr3 = [21, 22, 23, 24, 25, 26, 27, 28, 19, 30];

const combineArrays = (arr, length) => {
  let elementsCount = Math.floor(length / arr.length);

  const result = arr.reduce((acc, el) =>
    acc.concat(el.slice(0, elementsCount)), []);

  while (result.length < length)
    result.push(...arr.pop().slice(elementsCount, ++elementsCount));

  return result;
};

const result1 = combineArrays([arr1], 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const result2 = combineArrays([arr1, arr2], 10); // [1, 2, 3, 4, 5, 11, 12, 13, 14, 15]
const result3 = combineArrays([arr1, arr2, arr3], 10); // [1, 2, 3, 11, 12, 13, 21, 22, 23, 24]

答案 1 :(得分:0)

您可以对收集的数组进行封闭处理,并检索由数组数量定义的零件数组。

const
    getCombined = (a) => {
        const allArrays = [];

        return (b => {
            allArrays.push(b);
            let i = 0,
                p = Math.floor(10 / allArrays.length),
                result = [];

            while (i < allArrays.length) result.push(...allArrays[i++].slice(0, p));
            while (result.length < 10) result.push(allArrays[allArrays.length - 1][p++]);
            return result;
        });
    };

var c = [],
    add = getCombined(c);

c = add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
console.log(...c); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

c = add([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
console.log(...c); // [1, 2, 3, 4, 5, 11, 12, 13, 14, 15]

c = add([21, 22, 23, 24, 25, 26, 27, 28, 29, 30]);
console.log(...c); // [1, 2, 3, 11, 12, 13, 21, 22, 23, 24]