Coffeescript coffee脚本-基于第二个数组内容从一个数组中删除

Coffeescript coffee脚本-基于第二个数组内容从一个数组中删除,coffeescript,Coffeescript,我有两个数组-一个数组的属性名为vcdName,另一个数组的属性名为name。我想从数组1中删除在第二个数组中找到vcdName值的所有条目。因此: 阵列一 数据…vcdName=a 数据…vcdName=b 数组二 数据…名称=a 我想过滤数组1并删除第一个条目(因为在数组2中可以找到vcdName值a) 我知道我可以使用lodash函数,我尝试了以下方法。我相信使用is将返回那些匹配的条目,我需要将那些在arraytwo中找不到匹配项的条目放入FilterDarray filteredArr

我有两个数组-一个数组的属性名为vcdName,另一个数组的属性名为name。我想从数组1中删除在第二个数组中找到vcdName值的所有条目。因此: 阵列一 数据…vcdName=a 数据…vcdName=b

数组二 数据…名称=a

我想过滤数组1并删除第一个条目(因为在数组2中可以找到vcdName值a)

我知道我可以使用lodash函数,我尝试了以下方法。我相信使用is将返回那些匹配的条目,我需要将那些在arraytwo中找不到匹配项的条目放入FilterDarray

filteredArray = _.filter(@arrayone, (vcd) -> vcd.vcdName is @arraytwo)
我希望我没有太困惑。它觉得这应该比我做的要容易一些

一般来说,我需要这样做

for each entry in arrayone
  for each entry in arraytwo
    does entry from arrayone.vcdName == arraytwo.name - if yes then I do not want that entry from arrayone
我希望js core中有帮助,所以我不明白为什么需要使用lodash函数,但无论如何,您可以这样做:

arraytwo_names = @arraytwo.reduce (dict, entry) ->
  dict[entry.name] = true
  dict
, {}

results = @arrayone.filter (x) ->
  !arraytwo_names[x.vcdName]

从严格意义上讲,这不是必需的,因为您可以在过滤器的每次迭代中循环两次数组,但这是一种优化,使运行时为O(N),而不是O(N^2)

我对咖啡还不熟悉,所以一位同事建议我用lodash。我同意你的建议,它按我的需要发挥了作用。我唯一的问题是我不明白答案的第一部分是什么。如果您能详细解释,我们将不胜感激。但我只想说,我真的很感谢您花时间提供这个解决方案,我已经成功地使用了它。