javascript - 将数组转换为 N 大小但具有最大子数组大小的数组的数组
问题描述
我正在尝试将数组转换为n长度的大小相等的数组,但是,数组的数量不能超过o的大小。其中一个数组不能被分成n长度而不超过o数组数组,那么n可以增加以适应将数组数组的数量减少到o。任何非n大小的数组都应移动到数组数组的开头。可选地,每个元素都应该能够连接起来
注意:我使用数字来可视化问题,但元素是对象。
例如:注意数组括号在这些示例中为 {}、[]、(),以便于可视化
var arr = [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5], n = 2, o = 15
var shouldOutput = [{0,1},{2,3},{4,5},{6,7},{8,9},{0,1},{2,3},{4,5}]
arr = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5], n = 2, o = 15
var shouldOutput = [{1},{2,3},{4,5},{6,7},{8,9},{0,1},{2,3},{4,5}]
var arr = [01,23,45,67,89,01,23,45,67,89,01,23,45,67,89,01,23], n = 2, o = 15, concatenate = true
var shouldOutput = [({01})({2345})({6789})({0123})({4567})({8901})({2345})({6789})({0123})]
到目前为止,我有以下代码将正确生成长度为n的数组数组并将任何剩余元素正确推送到数组的开头,但我不确定如何将数组长度限制为o长度。
let getArrChunks = function (arr, n, o, joinStr) {
let ret = [];
let max = Math.floor(arr.length / n);
if ((arr.length % n) > 0) max++;
for (let i = arr.length - n; i > -n; i -= n) {
ret[(max--)-1] = joinStr === undefined ? arr.splice(i, n) : arr.splice(i, n).join(joinStr);
}
return ret;
};
解决方案
每个子数组(可能第一个除外)的大小是这个表达式的结果:
Math.max(n, Math.ceil(arr.length / o))
如果将上述表达式重新分配给n,则第一个子数组的大小为:
arr.length % n
...除非该表达式为零,在这种情况下,第一个子数组的大小与其他子数组相同,即n
在这个演示中使用:
const getArrChunks = function (arr, n, o, joinStr) {
n = Math.max(n, Math.ceil(arr.length / o)); // n is here increased if necessary
const first = arr.slice(0, arr.length % n);
const ret = first.length ? [joinStr === undefined ? first : first.join(joinStr)] : [];
for (let i = first.length; i < arr.length; i += n) {
ret.push(joinStr === undefined ? arr.slice(i, i+n) : arr.slice(i, i+n).join(joinStr));
}
return ret;
};
console.log(getArrChunks([1,2,3,4,5,6,7,8,9,10], 2, 3));
请注意,这里没有调用splice
,而是调用slice
。这样,给定的输入数组就不会发生变异。
推荐阅读
- reactjs - 如何在onClick上连续获取值
- mysql - MySQL FORIEGN_KEY_CHECKS=1 默认情况下,但不工作
- deep-learning - 脉冲神经网络的文本输入
- orgchart - 如何通过从mysql和php获取数据来制作组织结构图
- bazel - 使用 bazel 生成 par 文件时无法为 //:abc/requirements.txt 加载包
- java - Libgdx:Gdx.files.internal() 指向笔记本电脑上的错误位置,台式机上的正确位置?
- python - 删除括号中的引号和逗号
- java - 如何获取 Map 类型的类
- python - 如何在 Python 中表示长整数
- python - 在 AWS SageMaker 中为 Scikit 学习模型调用终端节点