Coffeescript 使用语法sugar简化数组差异代码
我可以使用一些我不知道的coffeescript语法来简化这个数组差异代码吗Coffeescript 使用语法sugar简化数组差异代码,coffeescript,Coffeescript,我可以使用一些我不知道的coffeescript语法来简化这个数组差异代码吗 first = [{id:1},{id:2},{id:3},{id:4},{id:5}] second = [{id:3},{id:4},{id:5},{id:6},{id:7}] first = first.filter (first_element) -> second = second.filter (second_element) -> if first_element.id ==
first = [{id:1},{id:2},{id:3},{id:4},{id:5}]
second = [{id:3},{id:4},{id:5},{id:6},{id:7}]
first = first.filter (first_element) ->
second = second.filter (second_element) ->
if first_element.id == second_element.id
first_element.remove = second_element.remove = true
return !second_element.remove?
return !first_element.remove?
console.log(first.concat second) # [{id:1},{id:2},{id:6},{id:7}]
这一个转换为完全相同的javascript:
first = [{id:1},{id:2},{id:3},{id:4},{id:5}]
second = [{id:3},{id:4},{id:5},{id:6},{id:7}]
first = first.filter (first_element) ->
second = second.filter (second_element) ->
first_element.remove = second_element.remove = yes if first_element.id is second_element.id
!second_element.remove?
!first_element.remove?
console.log(first.concat second) # [{id:1},{id:2},{id:6},{id:7}]
删除显式返回
s,将if
放在行的末尾yes
替换为true
,==
替换为is
虽然行不短,但此行保留阵列中的对象:
first = first.filter (firstElement) ->
keepFirst = yes
second = second.filter (secondElement) ->
keepFirst = (keepSecond = secondElement.id isnt firstElement.id) and keepFirst
keepSecond
keepFirst
请注意,不能使用
和=
运算符,因为它会缩短循环 是否需要在其余对象上没有“移除”属性?这不会增加语法上的shugar,但是去掉了几行。另外,您可以去掉返回值
s,用is
替换=
,用on
替换true
,但这不是糖,更多的糖霜。没有必要在剩余对象上没有remove属性。您需要remove
吗?不需要。我只是想知道如何在不破坏可读性的情况下,使用尽可能少的代码,按属性值区分对象数组,结果是remove
。实际上,我对“尽可能少的代码”和“+不破坏可读性”解决方案都感兴趣。