用于循环重构的coffeescript

dag*_*da1 2 coffeescript

我对coffeescript很新,我想知道是否有更多有经验的用户可以建议对以下代码进行重构:

splitCollection: =>
  maxLength = Math.ceil(@collection.length / 3)

  sets = Math.ceil(@collection.length / maxLength)
  start = 0    

  for x in [1..sets]   
    if x != sets
      @render new BusinessUnits(@collection.models.slice(start, (maxLength + start)))
    else
      @render new BusinessUnits(@collection.models.slice(start, (@collection.length)))
    start+= maxLength
Run Code Online (Sandbox Code Playgroud)

在coffeescript中似乎没有一个while循环似乎表明一个更好的机制.

任何建议赞赏.

Bri*_*sio 5

看起来你正在使用Backbone.js,它包含具有该groupBy功能的Underscore.js .

您可以创建"bucketNumber"功能:

bucketNumber = (value, index) ->
    Math.floor( index / @collection.length * 3 )
Run Code Online (Sandbox Code Playgroud)

然后将您的收藏分组:

sets = @collection.groupBy bucketNumber
Run Code Online (Sandbox Code Playgroud)

现在,假设有十个项目,sets应该看起来像这样:

{0: [{}, {}, {}], 1: [{}, {}, {}], 2: [{}, {}, {}, {}]}
Run Code Online (Sandbox Code Playgroud)

从这里开始,它变得相当直接

for bucketNumber, bucket of sets
    @render new BusinessUnits( bucket )
Run Code Online (Sandbox Code Playgroud)

这是一个jsFiddle显示它在行动