【发布时间】:2020-03-24 21:08:24
【问题描述】:
我有几个这样的 JS 对象:
var formulas = [
{formulaID: 1, lastManufactureDate: '2020-03-24'},
{formulaID: 3, lastManufactureDate: '2020-03-20'},
{formulaID: 7, lastManufactureDate: '2020-03-16'},
{formulaID: 9, lastManufactureDate: '2020-03-20'}
];
var allFormulas = [
{formulaID: 1, formulaName: 'Chocolate Milk 2%'},
{formulaID: 2, formulaName: 'Chocolate Milk 1%'},
{formulaID: 3, formulaName: 'Vanilla Creamer'},
{formulaID: 4, formulaName: 'Hazelnut Creamer'},
{formulaID: 5, formulaName: 'Plain Creamer'},
{formulaID: 6, formulaName: 'White Milk 2%'}
];
我需要找到一种方法来识别formulas 数组中的所有对象,这些对象具有allFormulas 数组中不存在的formulaID。基本上,相当于使用 WHERE 子句执行 LEFT OUTER JOIN 以在右侧查找 NULL。在此处的示例数据中,预期输出为 [{formulaID: 7, lastManufactureDate: '2020-03-16'}, {formulaID: 9, lastManufactureDate: '2020-03-20'}]
在应用程序中,formulas 数组中的对象数量约为 135,allFormulas 数组中的对象数量约为 1,100。
我们的目标是在没有第三方库的情况下高效地执行此操作。我发现了一个类似的问题here,但它没有解决识别一个数组中不在另一个数组中的对象。不幸的是,我真的不知道从哪里开始解决这个问题。
【问题讨论】:
-
写一个简单的nested loop join或更高效的hash join
-
您可以构建一个 allFormulas 的映射(如您指定的链接中的 authorMap),然后使用 Array.filter 删除具有匹配项的公式。请参阅 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 中的 Filtering Out Small Values 示例
标签: javascript