jquery拆分数组,块的最后一个元素是下一个块的第一个元素
Posted
技术标签:
【中文标题】jquery拆分数组,块的最后一个元素是下一个块的第一个元素【英文标题】:jquery split array with last element of a chunk being first element of the next chunk 【发布时间】:2021-09-10 16:34:44 【问题描述】:我想在jquery中拆分一个数组,这样拆分后,前一个数组的最后一个元素应该是当前数组的第一个元素。
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
如果我做splice
,那么它将拼接完全相同的大小,下一个数组将是下一个元素。所以如果我把它拼接成 5 我的输出应该是
var firstArr = arr.splice[0,4];
var secondArr = arr.splice[0,4];
var thirdArr = arr.splice[0,4];
var fourthArr = arr.splice[0,4];
var fifthArr = arr.splice[0,4];
现在我得到了
[1,2,3,4]
[5,6,7,8]
...
我需要的是
//firstArr = [1,2,3,4];
//secondArr = [4,5,6,7];
//thirdArr = [7,8,9,10];
//fourthArr = [10,11,12,13];
//fifthArr = [13,14,15,16];
如何在 jQuery 中实现这一点?
【问题讨论】:
【参考方案1】:我不知道比使用纯 javascript 解决方案更可取的 jquery 数组函数。下面是一个通过以下方式处理您的要求的示例:
将块的数量作为输入数组的长度的ceil
加上floor
重复条目的数量,全部除以输出块的大小
使用slice
,这样前一个数组的最后一个元素就是当前数组的第一个元素。
// chunking function
function chunk(arr, size)
if (size === 0) return [];
var arrCount = Math.ceil((arr.length + Math.floor(arr.length / size)) / size);
var chunks = [];
for (let i=0; i<arrCount; ++i)
chunks.push(arr.slice(i * (size - 1), i * (size - 1) + size));
return chunks;
// tests
console.log(chunk([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 4));
console.log(chunk([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 7));
console.log(chunk([1,2,3,4,5,6,7,8,9], 3));
console.log(chunk([1,2,3,4,5,6,7,8,9,10], 3));
console.log(chunk([1,2,3], 8));
console.log(chunk([], 10));
console.log(chunk([1, 2, 3, 4], 0));
console.log(chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 4));
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
【参考方案2】:const arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
let slices = []
let start = 0
let end = 3
for(i = 0; i < 5; i++)
let slice = arr.slice(start,end)
slice.push(arr[end])
start += 3
end += 3
slices.push(slice)
【讨论】:
以上是关于jquery拆分数组,块的最后一个元素是下一个块的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章