我有以下两个数组:
var arr1 = [1,2,4,5];
var arr2 = [];
如果没有连续值,我将如何分割?
在这个例子中,它应分为:[
[1,2]
和[4,5]
。
这两个数组应存储在arr2中。
示例2:
var arr3 = [1,2,3,5,6,7,8,9,10,11,13]
结果:[[1,2,3], [5,6,7,8,9,10], [11], [13]]
答案 0 :(得分:7)
您可以使用Array#reduce
并检查元素是否连续。然后追加到最后一个数组,否则将新数组推送到结果集。
var array = [1, 2, 4, 5],
result = array.reduce(function (r, a, i, aa) {
if (!i || aa[i - 1] + 1 !== a) {
r.push([a]);
} else {
r[r.length - 1].push(a);
}
return r;
}, []);
console.log(result);

答案 1 :(得分:1)
这是一种方法:
var arr1 = [1,2,4,5];
var slices = [];
var sliceNb = 0;
arr1.forEach(function(v, k, arr){
if(!slices[sliceNb]){
slices[sliceNb] = [];
}
slices[sliceNb].push(v);
if(arr[k+1] && arr[k+1] > v+1){
sliceNb++;
}
});
console.log(slices);
答案 2 :(得分:0)
试试这个:
arr1 = [1,2,3,4]
new_arr = [arr1.slice(0, (arr1.length/2) ), arr1.slice(arr1.length/2 +1, arr1.length)]
new_arr
//[[1,2],[3,4]]
答案 3 :(得分:0)
您可以通过分区数量来计算我将数组大小除以的块大小。然后你可以简单地切割数组。
var arr1 = [1, 2, 4, 5];
var arr2 = partitionArray(arr1, 2); // [[1, 2], [4, 5]]
document.body.innerHTML = '<pre>arr2 = ' + JSON.stringify(arr2) + '</pre>';
/**
* Partitions an array into chunks.
* @param {Array} arr - The array to partition.
* @param {int} n - The number of partitions.
* @return {Array} Returns a partitioned array.
*/
function partitionArray(arr, n) {
var chunkSize = Math.max(arr.length / n, 1);
return [].concat.apply([], arr.map(function(item, i) {
return i % chunkSize ? [] : [arr.slice(i, i + chunkSize)];
}));
}
&#13;
答案 4 :(得分:0)
您可以执行以下操作;
var arr = [1,2,4,5,6,111,111,112],
res = arr.reduce((p,c,i,a) => c === a[i-1]+1 ? (p[p.length-1].push(c),p)
: p.concat([[c]]),[]);
console.log(res);