我是 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
coffeescript 中似乎没有 while 循环,这似乎暗示了一种更好的机制。
任何建议表示赞赏。
最佳答案
看起来您正在使用 Backbone.js,其中包括具有 groupBy
功能的 Underscore.js。
您可以创建一个“bucketNumber”函数:
bucketNumber = (value, index) ->
Math.floor( index / @collection.length * 3 )
然后将您的收藏分组:
sets = @collection.groupBy bucketNumber
现在,假设有 10 个项目,sets
应该看起来像这样:
{0: [{}, {}, {}], 1: [{}, {}, {}], 2: [{}, {}, {}, {}]}
从这里开始,它变得相当简单
for bucketNumber, bucket of sets
@render new BusinessUnits( bucket )
这是一个jsFiddle实际展示
关于用于循环重构的 coffeescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210198/