lodash:使用不同的对象数组过滤对象数组

2023-12-23

这个问题具体针对lodash https://lodash.com/docs.

给定两个对象数组,什么是best way用另一个数组的对象过滤一个数组?我试图提出下面的一个场景,我这样做的方法是使用两个.forEach循环,但我想知道使用 lodash 是否有更好的方法来进行这种类型的过滤。


Example
The main source array of objects is users.
var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'joe', 'age': 40, 'active': false },
  { 'user': 'fred', 'age': 50, 'active': false },
  { 'user': 'fred', 'age': 60, 'active': false },
  { 'user': 'fred', 'age': 70, 'active': false },
  { 'user': 'fred', 'age': 22, 'active': false },
  { 'user': 'fred', 'age': 25, 'active': false },
  { 'user': 'barney', 'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];

将过滤的对象数组users数组被称为others.

var others = [
  { 'user': 'fred', 'age': 60 },
  { 'user': 'fred', 'age': 70},
  { 'user': 'fred', 'age': 22}
];

期望的结果基于others过滤users is:

[
  { 'user': 'fred', 'age': 60, 'active': false },
  { 'user': 'fred', 'age': 70, 'active': false },
  { 'user': 'fred', 'age': 22, 'active': false }
];

这是获得所需结果的一种方法。

var result = [];

_.forEach(users, function (n, key) {
   _.forEach(others, function (n2, key2) {
      if (n.user === n2.user && n.age === n2.age) {
         result.push(n);
      }
   });
});

console.log(result);

这是 jsbin 上的示例。
http://jsbin.com/hapariviya/1/edit?html,js,控制台,输出 http://jsbin.com/hapariviya/1/edit?html,js,console,output


您可以索引其他内容,然后获得所需的结果,而无需嵌套循环。无论数据量有多大,它都应该是一个相对有效的解决方案:

// index others by "user + age"
var lookup = _.keyBy(others, function(o) { return o.user + o.age.toString() });
// find all users where "user + age" exists in index, one loop, quick lookup. no nested loops
var result = _.filter(users, function(u) {
    return lookup[u.user + u.age.toString()] !== undefined;
});

这给出了相同的结果:

[
  { 'user': 'fred', 'age': 60, 'active': false },
  { 'user': 'fred', 'age': 70, 'active': false },
  { 'user': 'fred', 'age': 22, 'active': false }
];

有趣的是,您最初的解决方案是所有这些答案中性能最好的。

http://jsperf.com/testingdiwq http://jsperf.com/testingdiwq

性能问题在这里可以忽略不计。大多数情况下,DOM交互是前端的主要性能瓶颈。如果您要针对巨大的数据集运行此操作并注意到锁定,您肯定会希望通过使用 for 循环而不是使用 lodash 函数进行迭代来进一步优化它......但您通常不会在JavaScript...SQL 和其他语言会更好地处理它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lodash:使用不同的对象数组过滤对象数组 的相关文章

随机推荐

  • 将 Forecast.gts(hts 包)与外部回归器和并行处理结合使用

    我目前正在使用hts包预测 forecast gts 我现在有兴趣使用并行运行它num cores争论 但是当我添加外部回归器时 使用xreg and newxreg参数 我收到以下错误 Error in checkForRemoteErr
  • 列表框控件中的多列

    如何在列表框中显示两列 列表框并非设计用于显示多列数据 即使Windows Forms版本也不直接支持这种数据显示 您的要求尚不清楚 但最简单的方法是使用控制 它为您提供了许多开箱即用的功能 并且您可以轻松地将其扩展到更多列 如果您需要对外
  • Windows 上的 Django-pyodbc SQL 服务器连接问题

    我和另一位开发人员正在另一台服务器上使用旧版 SQL Server 数据库 SQLEXPRESS 设置 django v1 4 2 项目 到目前为止 我们已经能够使用 django pyodbc 从 Linux 和 Mac 连接到数据库 并
  • 设置初始值 Angular 2 反应式数组

    我正在尝试设置 Angular 2 反应形式 formArray 对象的初始值 尽管用于设置表单值的 json 对象包含具有多个条目的数组值 但仅显示第一个条目 并且 form value 也仅显示第一个条目 我正在使用语法
  • 使用 WhatsApp URL 方案发送 URL 和文本

    我正在尝试使用 WhatsApp 的自定义 URL 方案发送一些带有 URL 的文本 显然只有一个有效参数可用于此目的 text NSURL whatsappURL NSURL URLWithString whatsapp send tex
  • 是否有一个用于长类型的函数 Math.Pow(A,n) ?

    我正在测试一个小的 C 程序片段 short min short short int Math Pow 2 15 short max short short int Math Pow 2 15 1 Console WriteLine The
  • 向 ggplot2 绘图添加辅助 y 轴 - 使其完美

    添加辅助 y 轴 缩放原始 y 轴之一 这个话题并不新鲜 例如 它已被触动过多次在这个 ggplot2 谷歌组线程上 http groups google com group ggplot2 browse thread thread b48
  • 更改 Finder 文件夹背景颜色 AppleScript

    我正在尝试在重复循环中更改 Finder 的背景颜色 tell application Finder set windowCount to count windows if windowCount gt 0 then check if wi
  • 垃圾收集应该已删除对象,但 WeakReference.IsAlive 仍返回 true

    我有一个我希望通过的测试 但垃圾收集器的行为并不像我想象的那样 Test public void WeakReferenceTest2 var obj new object var wRef new WeakReference obj wR
  • tm 使用示例

    你能举个使用的例子吗tm 我不知道如何初始化struct 当前日期以此格式写入y m d 如何使用tm结构 call time 获取当前日期 时间 自 1970 年 1 月 1 日以来的秒数 call localtime to get st
  • .NET Core:从 API JSON 响应中删除空字段

    在 NET Core 1 0 所有 API 响应 的全局级别上 如何配置 Startup cs 以便在 JSON 响应中删除 忽略空字段 使用 Newtonsoft Json 您可以将以下属性应用于属性 但我想避免将其添加到每个属性 Jso
  • 将文件保存到 Azure Blob 中

    我正在使用下面的 python 代码将文件保存到本地文件夹中 我想将此文件直接保存到 Azure Blob 中 我不希望文件存储在本地然后上传到 blob 我尝试在文件夹变量中给出 blob 位置 但它不起作用 我有一个 excel 文件
  • 如何使用 Webpack 设置 React 组件的私有共享库

    我在多个 Webpack 项目中使用了许多 React 组件 我想通过 NPM 共享它们 所以我很自然地 将这些组件放入 私有 GitHub 存储库中 将该存储库添加到主项目中package json 为了能够同时在组件库上进行开发 我使用
  • HTML 下载和文本提取

    下载 URL 列表并仅提取文本内容的好工具或工具集是什么 不需要蜘蛛 但可以控制下载文件名 并且线程将是一个额外的好处 平台是linux wget http linux die net man 1 wget html2ascii http
  • 创建 CA 证书的 x.509 V3 扩展基本约束和密钥用法有什么区别?

    这两个动作似乎做了同样的事情 使用基本约束X 509 证书中的扩展名以表明它是 CA 证书 并且 使用按键用法扩展名例如表示公钥可用于证书签名 这些扩展有什么区别 它们是否有相同的目的或相辅相成 密钥用法 定义了可以使用证书中包含的密钥执行
  • Postgres pg_dump 缓存查找索引失败

    我正在尝试使用以下命令创建 postgres 数据库的备份 省略详细信息 pg dump h host p 5432 U user db gt db sql 一段时间后 我收到错误 已格式化 pg dump archiver db quer
  • 启动期间生成的 ELF 可执行文件段错误

    我正在生成一个 ELF 可执行文件 并将 text 部分加载到 LOAD 段中 它可以很好地拆卸 但尝试在下面运行它gdb gives During startup program terminated with signal SIGSEG
  • 如何在CSS中设置超细“font-weight”(小于100)?

    我想让文字超细 小于 font weight 100 这可以用 CSS 来做吗 Like this but with helvetica 处理 Web 字体时 CSS 字体粗细不会 使字体变细 或加粗 对于未从 url 加载的字体font
  • XML 序列化问题 - 如何序列化一个对象中的元素、属性和文本

    我是使用 NET 进行 XML 序列化的新手 在使用它一段时间后 我现在感到很困惑 我可以序列化具有包含其他元素的属性的元素 但如何序列化类似的内容
  • lodash:使用不同的对象数组过滤对象数组

    这个问题具体针对lodash https lodash com docs 给定两个对象数组 什么是best way用另一个数组的对象过滤一个数组 我试图提出下面的一个场景 我这样做的方法是使用两个 forEach循环 但我想知道使用 lod