【发布时间】:2017-03-03 03:33:43
【问题描述】:
我想将一个数字数组拆分为 N 个组,这些组必须从 larger 到 smaller 组排序。
例如,在下面的代码中,将一个 12 个数字的 Array 拆分为 5 个 Array,结果应该从大(组)到小,平均拆分:
source: [1,2,3,4,5,6,7,8,9,10,11,12]
⬇
output: [1,2,3] [4,5,6] [7,8] [9,10] [11,12]
Playground
// set up known variables
var arr = [1,2,3,4,5,6,7,8,9,10,11,12],
numberOfGroups = 5,
groups = [];
// split array into groups of arrays
for(i=0; i<arr.length; i++) {
var groupIdx = Math.floor( i/(arr.length/numberOfGroups) );
// if group array isn't defined, create it
if( !groups[groupIdx] )
groups[groupIdx] = [];
// add arr value to group
groups[groupIdx].push( arr[i] )
}
// Print result
console.log( "data: ", arr );
console.log( "groups: ", groups )
更新:
感谢 SimpleJ 的 answer,我可以完成我的工作。
用例是一种将 HTML 列表拆分为“分块”列表的算法,这是使用 CSS Columns 无法轻松实现的想法。
Demo page
【问题讨论】:
-
我不明白基于什么数组应该被拆分?为什么前 2 个数组包含 3 个数字而另一个仅包含 2 个?无论如何,如果您想按长度对拆分的数组进行排序,您可以使用 sort:
groups = groups.sort(function(g1, g2) { return g1.length < g2.length; }) -
"我在谷歌上搜索并看到了一些其他答案,但没有什么是我想要的......" - 那么你到底想要什么?您如何确定组大小,逻辑是什么?现有答案如何无法满足您的要求?您自己的代码如何无法满足您的要求?
-
@GershonPapi - 他们根据逻辑进行拆分,以使它们尽可能均匀,但永远不要在一个较小的群体之后再拥有一个更大的群体。
标签: javascript arrays math