如果您要从 Snippet 1
中记录final
数组,则这是输出( 图像1 )
我尝试做的是将我的数组缩小为 Image 2
中显示的数组。我已经尝试过使用lodash _.uniqBy()
[ Snippet 2 ],但我从记录reduce
变量获得的输出仍然是来自 图像1 的输出。如何将final
数组缩减为 图像2 中的输出?
图片2
const reduce = final.reduce((x, y) => {
if (x.department !== y.department) {
return x;
}
})
console.log(final)
console.log(reduce);
Snippet 1
_.uniqBy(final, 'department')
Snippet 2
更新
这是在.ts
中的TypeScript .js
中。
接口=> [{ department: string, professors: string[] }]
至于请求
这是我获取数据的地方
[
{
department: 'Department of Mathematics - INTRAMUROS',
professors: [
'Sabino, Lilibeth D.',
'Department Chair',
.....
这是我从final
数组
const recommend = [];
const final = [];
recommended.forEach((prof) => {
const find = proffessorDetails.find((collection) => {
return collection.professors.find((professor) => professor == prof);
});
recommend.push(find);
})
const find = recommend.map((collection) => {
return {
department: collection.department,
prof: _.intersection(collection.professors, recommended)
};
});
final.push(find);
答案 0 :(得分:3)
如果你使用Map
这样做会更好:
type department = { department: string, professors: string[] };
let mUnique : Map<string, department> = new Map(final.map((obj: department) => <[string, department]>[obj.department, obj]));
let mUniqueArray = [...mUnique.values()]; //or Array.from(mUnique.values());
答案 1 :(得分:2)
使用reduce
,您将始终修改同一个对象,并将其返回。提供起始值(在这种情况下为{}
)总是更容易。 {}
始终是obj
。要分配唯一值(item
s),请将它们分配给obj[item.department]
。最后不要忘记return
obj
。
const reduce = Object.values(final.reduce((obj, item) => {
obj[item.department] = item;
return obj;
}, {}));
使用Object.values
,您只能从缩小对象中检索值。
答案 2 :(得分:1)
如前所述,您需要提供累加器作为第一个arg来减少回调。请检查此链接:Array.prototype.reduce。不确定这是否是您想要的,但是此代码将为您提供具有唯一department
字段
final.reduce((res, item ) => {
return res.find(({ departament }) => departament === item.departament) ? res : [res, item];
}, [])