将数组划分为多个数组

时间:2016-09-19 11:56:42

标签: javascript arrays

我有以下两个数组:

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]]

5 个答案:

答案 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;
&#13;
&#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);