javascript - 将数组分成 n 块,起始元素重叠
问题描述
我有以下问题,我需要将一个数组分成至少 n 个偶数块,但是每个数组的第一个元素除了第一个元素是前一个数组的最后一个元素。如果没有足够的元素,最后一个数组可以包含较少数量的元素。
由 ~ @trincot 发现的边缘案例
如果无法拆分为 n 个请求的块,则在可能的情况下拆分为最接近的块数。
输入:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
预期输出 n=3:
[[1, 2, 3, 4, 5], [5, 6, 8, 9, 10], [10, 11]]
我需要 JavaScript 的解决方案,但可以随意提交其他语言,我将翻译它并用 JavaScript 提交解决方案。
我不工作的尝试,我无法弄清楚如何从所需的块号开始,所以我在这里使用了块大小,打算稍后从块号中找出块大小。
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
const range = 4;
const res = [array.slice(0, range)];
let start = range;
let end = range * 2;
while (true) {
console.log(start, end);
res.push(array.slice(start, end));
start += range;
end += range;
if (start >= array.length) {
break;
}
}
console.log(res);
解决方案
这是一个产生结果的映射函数:
const overlapSplit = (arr, length) => {
let chunk = 1 + Math.max(1, Math.ceil((arr.length - 1) / length));
if (length > 1 && (chunk - 1) * (length - 1) + 1 > arr.length) return overlapSplit(arr, length - 1);
return Array.from({length}, (_, i) =>
arr.slice(i * chunk - i, i * chunk - i + chunk)
);
}
console.log(overlapSplit([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 6));
推荐阅读
- powershell - PowerShell 函数从函数加载
- ios - 当 UITextfields 之间的更改焦点具有 secureTextEntry 为 true 时,shift 按钮闪烁
- julia - Julia JuMP 在 0.99 返回二进制变量
- node.js - MERN 应用程序中的重复选项卡问题
- vuex - Vuex 商店 unwatch
- r - Converting all data.frames in environment to data.tables
- pandas - Pandas - 只保留列值的第一个实例(用空字符串替换剩余)
- android - 将视图从一个位置动画化到另一个位置的问题
- woocommerce - 显示与产品图片不同的特色图片
- amazon-web-services - 无法打开到 EMR 主节点的 SSH 隧道