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

coffee script - remove from one array based on second array contents

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

数组二 数据...名称=a

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

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

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

希望对你有所帮助

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

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

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

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