Lodash对象数组的联合

Jan*_*nos 13 javascript lodash

我想使用该_.union函数创建两个对象数组的并集.Union仅使用基元数组,因为它使用===来检查两个值是否相等.

我想使用键属性比较对象:具有相同键属性的对象将被视为相等.是否有一个很好的功能方式来实现理想的使用lodash?

Cra*_*nec 14

一个非纯粹的lodash方法,但使用array.concat函数你可以做到这一点非常简单uniq():

var objUnion = function(array1, array2, matcher) {
  var concated = array1.concat(array2)
  return _.uniq(concated, false, matcher);
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用flatten()uniq():

var union = _.uniq(_.flatten([array1, array2]), matcherFn);
Run Code Online (Sandbox Code Playgroud)

  • 什么是matcherFn或匹配器? (2认同)

Mat*_*euH 13

那么UniqBy之前有两个数组的连接怎么样?

_.uniqBy([{'x':1},{'x':2},{'x':1}],'x');

结果 →[{'x':1},{'x':2}]


ala*_*udi 10

聚会晚了,但是_.unionWith在做您想要的事情上要好得多。

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];

_.unionWith(objects, others, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
Run Code Online (Sandbox Code Playgroud)