js实现数组分组

有这样一个数组:

[‘法国’,’澳大利亚’,’智利’,’新西兰’,’西班牙’,’加拿大’,’阿根廷’,’美国’,’0’,’国产’,’波多黎各’,’英国’,’比利时’,’德国’,’意大利’,’意大利’,]

现在希望让每3个分成一个数组,像这样:

[[‘法国’,’澳大利亚’,’智利’],[‘新西兰’,’西班牙’,’加拿大’],[‘阿根廷’,’美国’,’0’],[‘国产’,’波多黎各’,’英国’],[‘比利时’,’德国’,’意大利’],[‘意大利’],]

实现办法

第一种办法:

 var data = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利',];
var result = [];
for(var i=0,len=data.length;i<len;i+=3){
   result.push(data.slice(i,i+3));
}

第二种办法:

var countries= ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利'];
var chunkCountries =  _.chunk(countries,3);

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

import chunk from "lodash/chunk";
var chunk =require("lodash/chunk");

如果你只想用引入的chunk,用这个:https://github.com/ryancole/chunk/blob/master/src/chunk.js

第三种办法:

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);         
});

第四种办法:

function group(array, subGroupLength) {
    var index = 0;
    var newArray = [];

    while(index < array.length) {
        newArray.push(array.slice(index, index += subGroupLength));
    }

    return newArray;
}

var countries = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利',];
var groupedCountries = group(countries, 3);

第五种办法:

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);

第六种办法:

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);

第七种办法:



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年4月19日 新增 数组合并方法:

var list = [
    ['11','22','33'],
    ['aa','bb'],
]

//最终的结果是
var list = [
   ['112233'],
   ['aabb']
]
//方法一
var list=list.map(function (v) {
    return new Array(v.join(''))
})
//方法二
var res = []
for(i in list) {
    res.push(list[i].toString().replace(/,/g, ''))
}
//方法三
var result = [];
for(var i = 0, k = list.length; i < k; i++){
    result.push(list[i].join('').split());
}

以上办法由以下大神指导,感谢!

头像昵称
锋云战锦
小俞
hiYoHoo
外籍杰克
明就
interjc
fotuo
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值