javascript – lodash:使用不同数组对象的对象数组进行过滤

这个问题具体到lodash.

给定两个对象数组,使用另一个数组的对象过滤一个数组的最佳方式是什么?我试图在下面提出一个场景,我已经做了这样的方式是使用两个.forEach循环,但是我想知道如果使用lodash有一个更好的方式来进行这种类型的过滤.


对象的主要源数组是用户.

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 }
];

将过滤用户数组的对象数组称为其他对象.

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

基于其他过滤用户的期望结果是:

[
  { '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,console,output

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

// index others by "user + age"
var lookup = _.indexBy(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和其他人会更好地处理它.

转载注明原文:javascript – lodash:使用不同数组对象的对象数组进行过滤 - 代码日志