js将一位数组分割成每三个一组

有这样一个数组:
['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利',]

现在希望让每3个分成一个数组,像这样:
[['法国','澳大利亚','智利'],['新西兰','西班牙','加拿大'],['阿根廷','美国','0'],['国产','波多黎各','英国'],['比利时','德国','意大利'],['意大利'],]

求大神支招

阅读 28.6k
评论 更新于 2016-04-12
    8 个回答
    var data = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利',];
    var result = [];
    for(var i=0,len=data.length;i<len;i+=3){
       result.push(data.slice(i,i+3));
    }
    
    评论 赞赏 2016-04-12
      function group(array, subGroupLength) {
          var index = 0;
          var newArray = [];
      
          while(index < array.length) {
              newArray.push(array.slice(index, index += subGroupLength));
          }
      
          return newArray;
      }
      
      var countries = [];
      var groupedCountries = group(countries, 3);
      评论 赞赏 2016-04-12
        // define
        var chunk = function(arr, num){
              num = num*1 || 1;
              var ret = [];
              arr.forEach(function(item, i){
                if(i % num === 0){
                  ret.push([]);
                }
                ret[ret.length - 1].push(item);
              });
              console.log(ret);
              return ret;
            };
        // run
        var source = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利'];
        chunk(source, 3);

        http://codepen.io/interjc/pen/yOvqjq?edi...

        评论 赞赏 2016-04-12
          小俞
          • 8.3k
          var countries= ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利'];
          var chunkCountries =  _.chunk(countries,3);
          

          使用lodash的chunk方法,如果不想使用整个类库,可以单独引入这个方法

          import chunk from "lodash/chunk";
          var chunk =require("lodash/chunk");
          评论 赞赏 2016-04-12
            hiYoHoo
            • 2.2k
            var arr = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利'],
                newArr = [],
                b;
            arr.forEach(function(item, index, array) {
                var a = Math.floor(index / 3);
                if (b !== a) {
                    b = a;
                    newArr[a] = new Array();
                }
                newArr[a].push(item);         
            });
            评论 赞赏 2016-04-12
              var a = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利'];
              var b = [];
              var result = [];
              var k = 0;
              
              for(var i = 0; i<a.length; ++i){
                  if(i%3 == 0){
                      b = [];
                      for(var j = 0; j<3; ++j){
                          if(a[i+j] == undefined){
                              continue;
                          } else{
                              b[j] = a[i+j];
                          }
                      }
                      result[k] = b;
                      k++;
                  }
                  
              }
              console.log(result);
              评论 赞赏 2016-04-12
                fotuo
                • 20

                var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

                function formatArray(arr) {

                var begin = 0,
                    end = begin + 3;
                var result = [],
                    arrLength = arr.length;
                
                if (end >= arrLength) return result.push(arr);
                
                while (end < arrLength) {
                
                    result.push(arr.slice(begin, end));
                
                    begin = begin + 3;
                    end = begin + 3;
                    if (end > arrLength) {
                        end = arrLength;
                        result.push(arr.slice(begin, end));
                        break;
                    }
                }
                
                return result;

                }

                formatArray(arr); // [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j']]

                评论 赞赏 2016-04-12

                  非常感谢这么多大侠的帮助,谢谢,非常感谢!

                  评论 赞赏 2016-04-12
                    撰写回答

                    登录后参与交流、获取后续更新提醒