gpt4 book ai didi

javascript - 将数组转换为 N 大小但具有最大子数组大小的数组

转载 作者:行者123 更新时间:2023-11-29 18:45:54 26 4
gpt4 key购买 nike

我正在尝试将数组转换为长度为 n 的相等大小的数组,但是,数组的数量不能超过 o 的大小。在不超过 o 个数组数组的情况下无法将数组拆分为 n 个长度的情况下,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。这样,给定的输入数组就不会发生变化。

关于javascript - 将数组转换为 N 大小但具有最大子数组大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53973953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com