在lodash中将_.uniq与_.isEqual结合起来

时间:2015-06-02 20:09:09

标签: lodash

lodash提供了一个方法_.uniq()来查找数组中的唯一元素,但使用的比较函数是严格相等===,而我想使用_.isEqual(),它满足:

_.isEqual([1, 2], [1, 2])
// true

有没有办法用_.uniq()执行_.isEqual(),而无需编写自己的方法?

2 个答案:

答案 0 :(得分:4)

从lodash v4开始,有_.uniqWith(array, _.isEqual)。 来自文档:

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

_.uniqWith(objects, _.isEqual);
// → [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

更多信息:https://lodash.com/docs#uniqWith

答案 1 :(得分:2)

虽然您无法将isEqual()uniq()一起使用,但您所要求的内容似乎完全合理,值得一提。这是我能想到的最好的(干净/高效):

_.reduce(coll, function(results, item) {
    return _.any(results, function(result) {
        return _.isEqual(result, item);
    }) ? results : results.concat([ item ]);
}, []);

您可以使用reduce()构建一系列唯一值。 any()函数使用isEqual()检查当前项目是否已在结果中。如果没有,它会添加它。