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)