gpt4 book ai didi

Javascript 相当于 WHERE 子句中带有 NULL 的 LEFT OUTER JOIN

转载 作者:行者123 更新时间:2023-12-02 21:21:08 27 4
gpt4 key购买 nike

我有几个像这样的 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但它没有解决识别一个数组中不存在于另一个数组中的对象的问题。不幸的是,我真的不知道从哪里开始解决这个问题。

最佳答案

使用 allFormulas id 构建一个集合,然后过滤第一个数组。

var ids = new Set(allFormulas.map(f => f.formulaID));
var result = formulas.filter(f => !ids.has(f.formulaID));

复杂度为 O(N+M)(每个数组迭代一次,查找一组的时间应该为 O(1))。基于嵌套循环的解决方案(使用线性搜索,例如 find)是 O(N*M),这对于大型数组来说要差得多。

关于Javascript 相当于 WHERE 子句中带有 NULL 的 LEFT OUTER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60839365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com