我有一个数组,在这个数组中,我需要将、person数、块、等分。
人1是10人2是9人3是9人4是9人5是9人6是9人7是9人9人9人10是9人11是9
我试过了
Object.defineProperty(Array.prototype, 'chunk', {
value: function(chunkSize) {
var array = this;
return [].concat.apply([],
array.map(function(elem, i) {
return i % chunkSize ? [] : [array.slice(i, i + chunkSize)];
})
);
}
});
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 150, 151].chunk(Math.floor(151 / 31))但那会给我一个不正确的分配。
发布于 2021-08-25 06:35:52
使用除法的其余部分来获得需要额外元素的片数。然后使用新数组(分块)中的索引来确定是否需要该额外元素(即当该索引小于其余元素时)。
注:我不会改变阵列原型。让它成为一个简单的函数。
执行情况:
function partition(arr, length) {
let rest = arr.length % length;
let size = Math.floor(arr.length / length);
let j = 0;
return Array.from({length}, (_, i) => arr.slice(j, j += size + (i < rest)));
}
let data = Array.from({length: 151}, (_,i) => i+1);
let result = partition(data, 31);
console.log(result);
发布于 2021-08-25 06:13:00
您可以使用发电机在块中拆分数组:
function* chunks(arr, n) {
for (let i = 0; i < arr.length; i += n) {
yield arr.slice(i, i + n);
}
}
let a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 150, 151];
console.log([...chunks(a, Math.floor(151 / 31))]);然后,您可以修改这段代码,以便首先移动最后一个元素(如果您希望第一个人是最空的)。
作为附带说明,您可以替换以下内容:
let a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 150, 151];在这方面:
let a = [...Array(151).keys()];https://stackoverflow.com/questions/68917583
复制相似问题