coffeescript:如何声明可以在 Array.reduce 中使用的私有函数?
coffeeescript: how to declare private function that can be used from within Array.reduce?
主要的 objective 是通过任何给定的 属性 从数组中过滤重复项。我尝试使用的解决方案是在 js @
我尝试在 coffeescript 中实现它。一切都很好,除了函数的范围。我不希望从外部调用 _indexOfProperty 函数 - 因为它在所有其他上下文中都是无用的。但是,如果我将其设为 private(通过在声明中删除 @),我将无法从 inputArray.reduce 中调用它
我的咖啡代码是这样的:
Utils = ->
@filterItemsByProperty= (inputArray,property)=>
if not _.isArray inputArray
return inputArray
r = inputArray.reduce(((a,b,c,d,e)=>
if @._indexOfProperty(a,b,property) < 0
a.push(b)
a
),[])
r
@_indexOfProperty= (a,b,prop) ->
i = 0
while i< a.length
if a[i][prop] == b[prop]
return i
i++
-1
return
window.utils = Utils
这是我从其他地方调用它的方式:
App.utils.filterItemsByProperty(personArray,"name")
现在,任何人都可以这样做:
App.utils._indexOfProperty(1,2,3)
如何修改咖啡来阻止这种情况?
你能不能删除'@',这次在filterItemsByProperty范围内定义一个局部变量"indexOfProperty"并分配给它“_indexOfProperty”(这样你就可以在reduce中使用"indexOfProperty"( ))?
@filterItemsByProperty = (inputArray, property) ->
indexOfProperty = _indexOfProperty
if !_.isArray(inputArray)
return inputArray
r = inputArray.reduce(((a, b, c, d, e) ->
if indexOfProperty(a, b, property) < 0
a.push b
a
), [])
r
只是不要将 _indexOfProperty
放在 this
/ @
上,它不会显示:
Utils = ->
_indexOfProperty = (a,b,prop) ->
i = 0
while i< a.length
if a[i][prop] == b[prop]
return i
i++
-1
@filterItemsByProperty= (inputArray,property)=>
if not _.isArray inputArray
return inputArray
r = inputArray.reduce(((a,b,c,d,e)=>
if _indexOfProperty(a,b,property) < 0
a.push(b)
a
),[])
r
return
window.utils = Utils
主要的 objective 是通过任何给定的 属性 从数组中过滤重复项。我尝试使用的解决方案是在 js @
我尝试在 coffeescript 中实现它。一切都很好,除了函数的范围。我不希望从外部调用 _indexOfProperty 函数 - 因为它在所有其他上下文中都是无用的。但是,如果我将其设为 private(通过在声明中删除 @),我将无法从 inputArray.reduce 中调用它
我的咖啡代码是这样的:
Utils = ->
@filterItemsByProperty= (inputArray,property)=>
if not _.isArray inputArray
return inputArray
r = inputArray.reduce(((a,b,c,d,e)=>
if @._indexOfProperty(a,b,property) < 0
a.push(b)
a
),[])
r
@_indexOfProperty= (a,b,prop) ->
i = 0
while i< a.length
if a[i][prop] == b[prop]
return i
i++
-1
return
window.utils = Utils
这是我从其他地方调用它的方式:
App.utils.filterItemsByProperty(personArray,"name")
现在,任何人都可以这样做:
App.utils._indexOfProperty(1,2,3)
如何修改咖啡来阻止这种情况?
你能不能删除'@',这次在filterItemsByProperty范围内定义一个局部变量"indexOfProperty"并分配给它“_indexOfProperty”(这样你就可以在reduce中使用"indexOfProperty"( ))?
@filterItemsByProperty = (inputArray, property) ->
indexOfProperty = _indexOfProperty
if !_.isArray(inputArray)
return inputArray
r = inputArray.reduce(((a, b, c, d, e) ->
if indexOfProperty(a, b, property) < 0
a.push b
a
), [])
r
只是不要将 _indexOfProperty
放在 this
/ @
上,它不会显示:
Utils = ->
_indexOfProperty = (a,b,prop) ->
i = 0
while i< a.length
if a[i][prop] == b[prop]
return i
i++
-1
@filterItemsByProperty= (inputArray,property)=>
if not _.isArray inputArray
return inputArray
r = inputArray.reduce(((a,b,c,d,e)=>
if _indexOfProperty(a,b,property) < 0
a.push(b)
a
),[])
r
return
window.utils = Utils