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

毫克1075

这个问题特定于lodash

给定两个对象数组,用另一个数组的对象过滤一个数组最佳方法是什么我试图在下面提出一个方案,而我执行此操作的方式是使用两个.forEach循环,但是我想知道是否使用lodash可以进行这种类型的过滤。


示例
对象的主要源数组是 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是:

[
  { '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,控制台,输出

科里·丹尼尔森

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

// 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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从对象数组过滤

来自分类Dev

lodash 按 Angular 5 数组过滤对象数组

来自分类Dev

使用平面数组过滤JSON对象

来自分类Dev

使用平面数组过滤JSON对象

来自分类Dev

按键数组过滤对象

来自分类Dev

按数组过滤对象

来自分类Dev

按键数组过滤对象

来自分类Dev

使用Lodash将对象数组过滤为仅包含Key

来自分类Dev

使用基于嵌套值的数组过滤对象数组

来自分类Dev

将对象数组过滤为对象

来自分类Dev

如何用数组过滤对象数组

来自分类Dev

如何使用lodash过滤对象数组的数据

来自分类Dev

使用lodash从数组中过滤冗余对象

来自分类Dev

尝试使用数组过滤对象时失败

来自分类Dev

如何使用一些数组过滤对象?

来自分类Dev

如何用数组过滤对象

来自分类Dev

Mongo按对象数组过滤文档

来自分类Dev

如何按角色数组过滤对象?

来自分类Dev

如何用数组过滤对象

来自分类Dev

对象数组过滤 angular2

来自分类Dev

按 id 数组过滤对象

来自分类Dev

基于对象属性的数组过滤

来自分类Dev

用子数组过滤对象

来自分类Dev

将嵌套的对象数组过滤为对象数组

来自分类Dev

通过嵌套的对象值数组过滤对象数组

来自分类Dev

根据其他对象数组过滤对象数组

来自分类Dev

根据对象数组过滤对象数组返回相同的结果

来自分类Dev

基于数组过滤对象的属性。并获取过滤后的对象

来自分类Dev

Angular2使用管道根据对象数组过滤对象数组