coffee脚本 - 根据第二个数组内容从一个数组中删除

时间:2017-11-03 15:08:12

标签: coffeescript

我有2个数组 - 一个具有名为vcdName的属性,另一个具有名为name的属性。我想从数组1中删除所有在第二个数组中找到vcdName值的条目。所以: 阵列一 数据... vcdName =一 数据... vcdName = B

阵列二 数据...名称=一个

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

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

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

我希望有帮助

1 个答案:

答案 0 :(得分:1)

filter在js核心中,所以我不明白为什么你需要使用lodash函数,但无论如何你可以这样做:

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

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

reduce严格来说并不是必需的,因为你可以在过滤器的每次迭代中循环遍历数组,但它是一个优化并使运行时O(N)而不是O(N ^ 2)。