如何从一定数量的n个数组中选取n个元素?

时间:2018-05-03 12:43:06

标签: javascript arrays

我有很多数组。可以说m等于4。

 let arr1 = [1, 2, 3, 4, ...., 53];
 let arr2 = [54, 55, 56, ...., 76];
 let arr3 = [77, 78, ...., 84];
 let arr = [85, 86, 87, 88];

这里我想从所有数组中选择n个元素。可以说n等于18。

如果我想根据数组长度从4个阵列中选择具有特定百分比的18个数字,我该怎么办?

结果应该是,[1,2,3,......,10,54,.....,58,77,78,85];

我必须根据数组长度将18分为4种不同的大小。

我总共有来自4个阵列的88个元素。我需要不同的18个元素。

我试过了。

 let prct = Math.ceil((88 / 100) * arr.length);
 let count = Math.ceil((18 / 100) * prct);

我对所有四个阵列都做了同样的事情。但它只给了我16个。

我该怎么办?有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

假设数组按数组降序的长度排序。

您只能计算实际元素的一个内联计数,并将未使用的计数计入下一次迭代。最后,将剩余的数量用于获得所需的物品数量。

var arrays = [
        Array.from({ length: 53 }, (_, i) => i + 1),
        Array.from({ length: 23 }, (_, i) => i + 54),
        Array.from({ length: 8 }, (_, i) => i + 77),
        Array.from({ length: 4 }, (_, i) => i + 85)
    ],
    total = arrays.reduce((r, a) => r + a.length, 0),
    wanted = 18,
    parts = arrays.map((a, i, aa) => {
        var count = i + 1 < aa.length
                ? Math.floor(a.length * wanted / total)
                : wanted;
        wanted -= count;
        total -= a.length;
        return count;
    }),
    result = arrays.map((a, i) => a.slice(0, parts[i]));
 
console.log(parts);
console.log(result);