Coffeescript 使用语法sugar简化数组差异代码

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 ==

我可以使用一些我不知道的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 == 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
。实际上,我对“尽可能少的代码”和“+不破坏可读性”解决方案都感兴趣。