Functional programming 如何使用下划线.js重构此数组比较?
此代码是否可以以更具功能性的/下划线样式进行重构,主要是检查Functional programming 如何使用下划线.js重构此数组比较?,functional-programming,coffeescript,refactoring,underscore.js,Functional Programming,Coffeescript,Refactoring,Underscore.js,此代码是否可以以更具功能性的/下划线样式进行重构,主要是检查实际组件中是否存在附加组件的部分 describe 'when removing', -> it 'should remove all bound events from the window', -> @view.remove() addedEvents = ['dragenter', 'drop', 'dragleave', 'register'] actualEvents = _.keys
实际组件中是否存在附加组件的部分
describe 'when removing', ->
it 'should remove all bound events from the window', ->
@view.remove()
addedEvents = ['dragenter', 'drop', 'dragleave', 'register']
actualEvents = _.keys $._data(window, 'events') #=> ['onload', 'drop', 'etc.']
for event in addedEvents
present = _.contains(actualEvents, event)
expect(present).toBe(false)
如果您特别希望它使用下划线函数,那么应该执行以下操作
addedEvents = ['dragenter', 'drop', 'dragleave', 'register']
actualEvents = _.keys $._data(window, 'events')
present = _.reduce addedEvents, ((prev, current) ->
prev or _.contains actualEvents, current
), false)
expect(present).toBe false
当然,您可以在不使用下划线的情况下执行此操作,但它需要ES5函数:
addedEvents = ['dragenter', 'drop', 'dragleave', 'register']
actualEvents = Object.keys $._data(window, 'events')
present = addedEvents.reduce, ((prev, current) ->
prev or actualEvents.indexOf(current) > -1
), false)
expect(present).toBe false
可能使用Coffee的后缀for
和in
操作符可以使代码更可读:
addedEvents = ['dragenter', 'drop', 'dragleave', 'register']
actualEvents = _.keys $._data(window, 'events') #=> ['onload', 'drop', 'etc.']
expect(event not in actualEvents).toBe(true) for event in addedEvents
如果您使用Jasmine作为您的测试库,那么可以使用来保存我认为更可读的:)
最后,如果您想使用带有下划线的更具功能性的样式,可以将此断言视为检查actualEvents
上是否没有任何addedEvents
,换句话说,这两个数组的值是否为空:
expect(_.intersection(actualEvents, addedEvents).length).toBe(0)
expect(_.intersection(actualEvents, addedEvents).length).toBe(0)