我需要基于数据中的唯一值创建一个过滤器对象,以传递给前端应用程序。我需要其中一个过滤器是对象数组。我先前的[...new Set()]
方法无法正常工作,我收到一条错误消息,提示name: is unexpected, expected }
我的其他[...new Set()]
功能都可以正常工作。
let allEmployees = await db.Employee.find();
let filters = {
hiringManager: [...new Set(allEmployees.map(emp => {
emplid: emp.emplid,
name: emp.name,
hrOrg: emp.hrOrg}
))].sort(function(a, b){return a.name - b.name}),
countries:[...new Set(allEmployees.map(emp => emp.country))].sort(),
globalGrades: [...new Set(allEmployees.map(emp => emp.globalGrade))].sort(),
jobFamilies: [...new Set(allEmployees.map(emp => emp.jobFamily))].sort()
};
关于如何返回一组对象的任何想法?
答案 0 :(得分:1)
首先,我要避免在Set中使用传播运算符。因为有时在特定系统中会遇到一些解释问题(扩散运算符不能很好地处理类似数组的问题)。
const allEmployees = [{
country: 'France',
}, {
country: 'Westeros',
}, {
country: 'France',
}];
const unique = Array.from(new Set(allEmployees.map(emp => emp.country))).sort();
console.log(unique);
然后,在您的情况下,您会错过括号。如果像这样使用map(emp => {
,则map
将考虑{
内部的内容是一个函数定义。如果您想直接从地图返回数据,请将其包装在()
内,例如:
map(() => ({
}));
const allEmployees = [{
country: 'France',
}, {
country: 'Westeros',
}, {
country: 'France',
}];
const ret = [
...new Set(allEmployees.map(emp => ({
emplid: emp.country,
}))),
];
console.log(ret);