如何使用javascript或lodash获取Uniq对象

我有这样的对象的数组

var result={ "employees": [ { "_id": "5796e7a27d075bd0453b7751", "firstName": "Test4", "schemaName": "Employee" }, { "_id": "5796e78e7d075bd0453b774f", "firstName": "Test 3", "schemaName": "Employee" }, { "_id": "5790b203df5ad69025e8a20b", "email": "df@gmail.com", "schemaName": "Employee" }, { "_id": "577f69cc789df5ec1e995513", "firstName": "Jeevan", "email": "ddd@asd.com", "schemaName": "Employee" }, { "_id": "577f69cc789df5ec1e995513", "firstName": "Chethan", "email": "ddd@asd.com", "schemaName": "Employee" } ] }; }; 

但我想通过电子邮件uniq对象。 我使用lodash uniq,但它没有给出适当的结果。 在这里我试了这个代码。

 var combined=result.employees.map(function(employee){ employee.schemaName='Employee'; return employee; }); combined = _.uniq(combined, 'email'); console.log(combined); 

结果是这样的。

  [ { _id: '5796e7a27d075bd0453b7751', firstName: 'Test4', schemaName: 'Employee' }, { _id: '5790b203df5ad69025e8a20b', email: 'df@gmail.com', schemaName: 'Employee' }, { _id: '577f69cc789df5ec1e995513', firstName: 'Jeevan', email: 'ddd@asd.com', schemaName: 'Employee' } ] 

我想要没有电子邮件ID的对象,我只想要唯一的对象是唯一的emailid的,任何人都可以帮助我。 我想结果包含没有电子邮件ID的对象也。 结果应该是这样的。

 [ { _id: '5796e7a27d075bd0453b7751', firstName: 'Test4', schemaName: 'Employee' }, { _id: '5796e78e7d075bd0453b774f', firstName: 'Test3', schemaName: 'Employee' }, { _id: '5790b203df5ad69025e8a20b', email: 'df@gmail.com', schemaName: 'Employee' }, { _id: '577f69cc789df5ec1e995513', firstName: 'Jeevan', email: 'ddd@asd.com', schemaName: 'Employee' } ] 

这也可以做到。

 _.uniqBy(result.employees, function(employee){return employee.email || employee._id;}); 

我会build议使用_.uniqWith这与你自己的比较。

 var result = { "employees": [ { "_id": "5796e7a27d075bd0453b7751", "firstName": "Test4", "lastName": "T", "__v": 0, "schemaName": "Employee" }, { "_id": "5796e78e7d075bd0453b774f", "firstName": "Test 3", "lastName": "T", "__v": 0, "schemaName": "Employee" }, { "_id": "5796e77e7d075bd0453b774d", "firstName": "Test 2", "lastName": "T", "__v": 0, "documents": [], "schemaName": "Employee" }, { "_id": "5796e7707d075bd0453b774b", "firstName": "Test1", "lastName": "T", "__v": 0, "schemaName": "Employee" }, { "_id": "5790b203df5ad69025e8a20b", "firstName": "Ganesh", "lastName": "dsf", "__v": 0, "email": "df@gmail.com", "schemaName": "Employee" }, { "_id": "577f69cc789df5ec1e995513", "firstName": "Jeevan", "__v": 0, "email": "fs@asf.com", "schemaName": "Employee" }, { "_id": "577f69cc789df5ec1e995513", "firstName": "Chethan", "__v": 0, "email": "fs@asf.com", "schemaName": "Employee" } ] }; // Create a lodash chain from the employees. combined = _.uniqWith(result.employees, function(e1, e2){ return e1.email && e1.email === e2.email; }); console.log(combined); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.0/lodash.min.js"></script>