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拆分数组,块的最后一个元素是下一个块的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在光滑滑块的左侧对齐?

如何对元素多于每个块的线程数的数组执行并行扫描?

如何将 jQuery 滑块的值保存到 Person 模型中?

数组查询块的原因

数组查询块的原因

从 CDN 导入的代码拆分块的 Webpack 设置