我有很多数组。可以说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个。
我该怎么办?有什么建议吗?
感谢。
答案 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);