gpt4 book ai didi

数组分块的 JavaScript 特定方式

转载 作者:行者123 更新时间:2023-12-04 10:07:03 24 4
gpt4 key购买 nike

我有这样的数组:

[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}, {i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}, ]

我需要将它也分块输出如下:
[[{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}], [{i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}], [{i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}], [{i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}], [{i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}] ]

子数组中的最后一个对象与下一个子数组中的第一个对象相同。

目前我写的是这样的:
const chunk = (arr, size) => Array.from( { length: Math.ceil(arr.length / size) }, (v, i) =>
arr.slice(i * size, i * size + size));

但它只是按特定数量的元素进行分块。我也可以通过奇怪的嵌套循环来实现我的目标..但也许有人知道更好..更简单的方法?

最佳答案

如果当前块索引 ( i ) 不是 0,您可以从切片开始和结束删除 1。但是,由于我们将索引向后移动 1,我们可能有更多块。我们需要将总块数与递减的索引进行比较,并且没有,并相应地添加到页面数中。

const chunkMinus1 = (arr, size) => {
const chunks = Math.ceil(arr.length / size)
const maxItems = chunks * (size - 1) + 1
const length = chunks + Math.ceil(Math.max(arr.length - maxItems, 0) / size)

return Array.from(
{ length },
(v, i) => arr.slice(i * size - (i ? 1 : 0), i * size + size - (i ? 1 : 0))
)
};

const arr = [{i: 0, abc: true}, {i: 1, abc: true}, {i: 2, abc: true}, {i: 3, abc: true}, {i: 4, abc: true}, {i: 5, abc: true}, {i: 6, abc: true}, {i: 7, abc: true}, {i: 8, abc: true}, {i: 9, abc: true}, {i: 10, abc: true}, {i: 11, abc: true}]

const result = chunkMinus1(arr, 6)

console.log(result)

关于数组分块的 JavaScript 特定方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61532505/

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