将 array/split 的随机元素合并成块

Merge random elements of array/split into chunks

如何使用一些特殊算法将数组拆分成块?例如。我需要将数组缩短为 10 个元素的大小。如果我有 11 个元素的数组,我希望合并两个下一个元素。如果我有 13 个元素的数组,我想合并三个元素。等等。有什么解决办法吗?

Sample #1
var test = ['1','2','3','4','5','6','7','8','9','10','11'];
Need result = [['1'],['2'],['3'],['4'],['5|6'],['7'],['8'],['9'],['10'],['11']]

Sample #2
var test = ['1','2','3','4','5','6','7','8','9','10','11','12','13'];
Need result = [['1|2'],['3'],['4'],['5'],['6'],['7|8'],['9'],['10'],['11'],['12|13']]

提前致谢。

A - 找出差异并创建如此多的随机数用于合并并放入数组
B - 遍历初始数字数组。
B1 - 如果迭代器编号在合并编号数组中(使用 indexOf),则将其与下一个合并并增加迭代器(跳过下一个,因为它已合并并且已经在结果数组中)
B1 示例:

int mergers[] = [2, 7, 10]
//in loop when i=2
if (mergers.indexOf(i)>-1) { //true
   String newVal = array[i]+"|"+array[i+1]; //will merge 2 and 3 to "2|3"
   i++; //adds 1, so i=3. next loop is with i=4
}

C - 将新值放入结果数组

你可以试试这个代码

jQuery(document).ready(function(){ 
var test = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'];  


        var arrays = [];

        var checkLength =  test.length;

        var getFirstSet = test.slice(0,10);
        var getOthers = test.slice(10,checkLength);

        $.each( getFirstSet, function( key,value ) {
              if(key in getOthers){
                values = value +'|'+ getOthers[key]; 
                arrays.push(values);
              }else{
                arrays.push(value);            
              }
        });


        console.log(arrays);
  
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

以下代码很可能会满足您的要求。

function condense(a){
  var  source = a.slice(),
          len = a.length,
  excessCount = (len - 10) % 10,
         step = excessCount - 1 ? Math.floor(10/(excessCount-1)) : 0,
    groupSize = Math.floor(len / 10),
     template = Array(10).fill()
                         .map((_,i) => step ? i%step === 0 ? groupSize + 1
                                                           : i === 9 ? groupSize + 1
                                                                     : groupSize
                                            : i === 4 ? groupSize + 1
                                                      : groupSize);
  return template.map(e => source.splice(0,e)
                                 .reduce((p,c) => p + "|" + c));
}

var test1 = ['1','2','3','4','5','6','7','8','9','10','11'],
    test2 = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21'];
console.log(condense(test1));
console.log(condense(test2));