Underscore.js 获取一组独特的对象

Underscore.js get an array of unique objects

我有 2 个对象数组。数组之间有重复项。我想将它们合并到所有 unique 对象的 1 个数组中(因此没有重复项)。

如何通过比较每个对象的 "id" 来做到这一点?

Underscore.js 有一个名为 _.uniq() 的方法。它看起来是正确的,但我无法正确获得 "iterator" 参数的语法。

var firstArray = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }];
var secondArray = [{ id: 2, name: "boop" }, { id: 3, name: "baz" }];

firstArray.push(secondArray);
var myUniqueArray = _.uniq(firstArray, false, ???);

myUniqueArray // [{ id: 1, name: "foo"}, { id: 2, name: "bar" }, { id: 3, name: "baz" }];

您应该能够使用 _.uniq 方法实现此目的,该方法与要用于过滤项目的 属性 名称的第二个参数一起使用:

var firstArray = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }];
var secondArray = [{ id: 2, name: "boop" }, { id: 3, name: "baz" }];

var result = _.uniq(firstArray.concat(secondArray), 'id');

alert(JSON.stringify(result, null, 4));
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

下面应该这样做:

var myUniqueArray = _.uniq(firstArray.concat(secondArray), false, function (obj) {
    return obj.id;
});

这里的 iteratee 将生成一个检查唯一性的值,在本例中为 id 属性 值。

这是一个JSFiddle