【问题标题】:how to split array into given number in javascript如何在javascript中将数组拆分为给定的数字
【发布时间】:2020-07-16 05:59:24
【问题描述】:

我有一个数组,我必须将它拆分为给定的数字,如果(剩余数组大小

例如

var arr = [1,2,3,4,5,6,7,8,9,10,11]

if given_no 2 = Math.round(arr.length/2)= chunk_size 6 = [[1,2,3,4,5,6],[6,7,8,9,10]] 
if given_no 3 = Math.round(arr.length/3)= chunk_size 4 = [[1,2,3,4],[5,6,7,8],[9,10,11]]
if given_no 4 = Math.round(arr.length/4)= chunk_size 3 = [[1,2,3],[4,5,6],[7,8,9],[10,11]]

【问题讨论】:

  • give_number 只到 4 还是动态的?
  • Math.round(11/2) == 6,而不是5。你的意思是Math.floor(11/2)? - 如果是这样,Math.floor(11/3) == 3Math.floor(11/4) == 2... 另外,我不清楚“如果(剩余数组大小
  • @SijuSamson..它的动态(given_no)

标签: javascript arrays multidimensional-array array-splice


【解决方案1】:

首先 Math.round(arr.length/2) 将返回 6 而不是 5。 请看下面的代码。我创建了 splitArr 函数,它将根据给定的数字返回拆分数组。

var arr = [1,2,3,4,5,6,7,8,9,10,11];
console.log('Given 2: ' + JSON.stringify(splitArr(arr, 2))); // given 2
console.log('Given 3: ' + JSON.stringify(splitArr(arr, 3))); // given 3
console.log('Given 4: ' + JSON.stringify(splitArr(arr, 4))); // given 4
console.log('Given 5: ' + JSON.stringify(splitArr(arr, 5))); // given 5
console.log('Given 6: ' + JSON.stringify(splitArr(arr, 6))); // given 6

    function splitArr(arr, given) {
      var arrSize = arr.length
      var split = Math.round(arrSize/given);
      var returnArr = [];
      var loopCount;
      for(i = 0; i < given; i++){
        loopCount = (i*split)+split;
        loopCount = loopCount > arrSize ? arrSize : loopCount;
        
        var innerArr = arr.slice((i*split), loopCount)

        returnArr.push(innerArr);
      }

      if(loopCount < arr.length){
         innerArr.push(...arr.slice(loopCount, arrSize));
      }
      
      return returnArr;
    }

【讨论】:

  • 它失败了 => splitArr(5); // 给定 5 => 给定 5: [[1,2],[3,4],[5,6],[7,8],[9,10]]...其中元素 '11'
  • @NRaj 请验证编辑后的答案,如果可行,请点赞。
  • 性能如何,如果数组大小在 100k 到 500k 之间?
  • 改进了我的答案,请确认。删除了 2 个内部 for 循环,这将提高性能。
  • 对于 give = 5,你似乎有更多的嵌套:Given 5: [[1,2],[3,4],[5,6],[7,8],[9,10,[11]]]。你有[9, 10, [11]]
【解决方案2】:

您可以使用Math.round()array.slice()

var splitArray = (arr, num) => {
    let result = [];
    let size   = Math.round(arr.length/num); 
    for (let i=0; i<num; i++) {
        let end = i === num-1 ? arr.length : (i+1) * size;
        result.push(arr.slice(i*size, end));
    }
    return result;  
} 

var arr = [1,2,3,4,5,6,7,8,9,10,11];
console.log(JSON.stringify(splitArray(arr, 2)));
console.log(JSON.stringify(splitArray(arr, 3)));
console.log(JSON.stringify(splitArray(arr, 4)));
console.log(JSON.stringify(splitArray(arr, 5)));

【讨论】:

  • 这不适用于 console.log(JSON.stringify(splitArray(arr, 5)));
  • 是的,console.log(JSON.stringify(splitArray(arr, 5)));
  • 好的Math.round() 是。固定。
【解决方案3】:
 function splitintochunks(arr,l){
    let result=[];
    while(arr.length>0){
    result.push(arr.splice(0,l));
    }
    return result;
}
//EXAMPLE: call in the below way spltIntoChunks([1,2,3,4,5,6,7,8,9,10,11],5);

【讨论】:

  • 这个不行,请测试一次,然后给出合适的结果。
  • @SijuSamson,我弄错了,谢谢 :) 添加评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2022-07-06
  • 2021-06-23
相关资源
最近更新 更多