如何使用javascript或lodash获取Uniq对象
How to get the Uniq objects Using javascript or lodash
我有这样的对象数组
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的对象,我只想要唯一的电子邮件ID对象,任何人都可以帮助我。我希望Result包含没有电子邮件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;});
我建议使用_.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>
我使用的是deepEquals
算法,因此此代码变得更加通用。如果您只想通过电子邮件进行检查,只需更改下面的equals
功能即可。
const equals =
// Naïve deepEquals, only for demo. Doesn't work if keys orders vary.
(obj1, obj2) => JSON.stringify(obj1) === JSON.stringify(obj2);
// A real deepEquals:
// https://www.npmjs.com/package/fast-deep-equal
const uniq = (el1, index1, array) =>
array.every((el2, index2) => index1 <= index2 || !equals(el1, el2));
[{ a: 1, b: 2 }, { c: 3 }, { a: 1, b: 2 }, { d: 4 }, { a: 1, b: 2 }].filter(uniq);
// Result: [ { a: 1, b: 2 }, { c: 3 }, { d: 4 } ]
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用lodash从对象数组中获取uniq[key,value]
- 如何使用javascript或lodash获取Uniq对象