我需要将一个JavaScript数组拆分为n
大小的块。
例如:给定此数组
["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]
且n
等于4,则输出应为:
[ ["a1", "a2", "a3", "a4"],
["a5", "a6", "a7", "a8"],
["a9", "a10", "a11", "a12"],
["a13"]
]
我知道纯JavaScript solutions可以解决这个问题,但是因为我已经在使用Lodash了,所以我想知道Lodash是否提供了一个更好的解决方案。
编辑:
我创建了一个jsPerf test来检查下划线解决方案有多慢。
发布于 2011-12-20 04:02:18
对于基于下划线的解决方案,请尝试以下内容:
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.groupBy(data, function(element, index){
return Math.floor(index/n);
});
lists = _.toArray(lists); //Added this to convert the returned object to an array.
console.log(lists);
使用chain wrapper方法可以将这两个语句组合在一起,如下所示:
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.chain(data).groupBy(function(element, index){
return Math.floor(index/n);
}).toArray()
.value();
发布于 2015-10-27 07:03:20
一个可能更简单的表达式:
const coll = [ "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9" ];
const n = 2;
const chunks = _.range(coll.length / n).map(i => coll.slice(i * n, (i + 1) * n));
console.log(chunks);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
发布于 2018-06-06 06:17:24
从版本1.9.0开始,下划线本身就支持_.chunk()。
const data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
const chunks = _.chunk(data, 4);
console.log(chunks);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"></script>
https://stackoverflow.com/questions/8566667
复制相似问题