Javascript ES6 REDUCT方法未返回所需输出
这是输出(图像1),如果您将从片段1 我想做的是将我的数组缩小到类似于图2中显示的数组 我已经尝试使用lodashJavascript ES6 REDUCT方法未返回所需输出,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,这是输出(图像1),如果您将从片段1 我想做的是将我的数组缩小到类似于图2中显示的数组 我已经尝试使用lodash\uqby()[代码片段2],但我从日志reduce变量中获得的输出仍然是图像1的输出。如何将我的final数组减少到图像2中的输出 图像1 图像2 片段1 片段2 更新 这是在TypeScript.ts中,而不是在.js中 接口=>[{系:字符串,教授:字符串[]}] 至于请求 这就是我获取数据的地方 [ { department: 'Department
\uqby()
[代码片段2],但我从日志reduce
变量中获得的输出仍然是图像1的输出。如何将我的final
数组减少到图像2中的输出
图像1
图像2
片段1
片段2
更新
这是在TypeScript.ts
中,而不是在.js
中
接口=>[{系:字符串,教授:字符串[]}]
至于请求
这就是我获取数据的地方
[
{
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);
最好使用
地图来进行此操作:
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());
type department={department:string,professors:string[]};
让mUnique:Map=newmap(final.Map((obj:department)=>[obj.department,obj]);
让mUniqueArray=[…mUnique.values()]//或Array.from(mUnique.values());
最好使用地图进行此操作:
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());
type department={department:string,professors:string[]};
让mUnique:Map=newmap(final.Map((obj:department)=>[obj.department,obj]);
让mUniqueArray=[…mUnique.values()]//或Array.from(mUnique.values());
使用reduce
,您将始终修改相同的对象,然后返回它。提供起始值总是比较容易的({}
在本例中){}
始终是您的obj
。要分配唯一值(item
s),可以将它们分配给obj[item.department]
。不要忘记在结尾处返回obj
const reduce = Object.values(final.reduce((obj, item) => {
obj[item.department] = item;
return obj;
}, {}));
只从简化对象中检索值。使用reduce
,您将始终修改同一对象并返回它。提供起始值总是比较容易的({}
在本例中){}
始终是您的obj
。要分配唯一值(item
s),可以将它们分配给obj[item.department]
。不要忘记在结尾处返回obj
const reduce = Object.values(final.reduce((obj, item) => {
obj[item.department] = item;
return obj;
}, {}));
您只需从reduced对象中检索值。如前所述,您需要提供累加器作为reduce回调的第一个参数。检查此链接:。不确定这是否是您想要的,但此代码将为您提供具有唯一部门字段的对象数组
final.reduce((res, item ) => {
return res.find(({ departament }) => departament === item.departament) ? res : [res, item];
}, [])
正如前面提到的,您需要提供累加器作为第一个参数来减少回调。检查此链接:。不确定这是否是您想要的,但此代码将为您提供具有唯一部门字段的对象数组
final.reduce((res, item ) => {
return res.find(({ departament }) => departament === item.departament) ? res : [res, item];
}, [])
“你总是在reduce函数中返回累加器,这不是你使用reduce
的方式。我明白了,那么有什么可能是将我的最终数组减少到图2中的输出的最佳方法?”str指出。顺便说一句,你知道如何解决这个问题吗?你总是在reduce函数中返回累加器,这不是你使用reduce
的方式。我明白了,那么有什么可能是将我的最终数组减少到图2中的输出的最佳方法呢?@str指出。顺便说一句,你知道怎么解决这个问题吗?你好@MinusFor,我在传递map中的final.map时出现了一些lint错误,错误是void[]类型的参数不可赋值。你在使用typescript?@Vadamadafaka,你需要添加正确的类型注释。如果您有对象的类型定义,我可以帮助您。Idk if typescript现在本地支持Map
。我所能做的就是建议Map
,但我肯定你会想要更具体的东西。界面是这样的[{department:string,professors:string[]}]
@Vadamadafaka,好吧,我更新了答案,看看这是否能解决问题。您好@MinusFor,我在通过Map中的final.Map时出现了一些lint错误,错误表明void[]类型的参数不可赋值您使用的是typescript?@Vadamadafaka,您需要添加正确的类型注释。如果您有对象的类型定义,我可以帮助您。Idk if typescript现在本地支持Map
。我所能做的就是建议Map
,但我肯定你会想要更具体的东西。界面是这样的[{系:string,教授:string[]}]
@Vadamadafaka,好吧,我更新了答案,看看这是否解决了问题。您好@Xufox我尝试了这个代码段,但返回值仍然是图像中的输出1@Vadamadafaka这是不可能的。请更新您的问题,并将实际的final
数组粘贴为纯文本(而不是图像),并将其格式化为代码({}
按钮)。此表达式未分配给任何对象,因此您需要将其放入somewhere@MinusFour正确的,我的代码段中没有包含const reduce=
。您好@Xufox我尝试了这个代码段,但返回值仍然是图像中的输出1@Vadamadafaka这是不可能的。请更新您的问题,并将实际的final
数组粘贴为纯文本(而不是图像),并将其格式化为代码({}
按钮)。此表达式未分配给任何对象,因此您需要将其放入somewhere@MinusFour对,我没有在代码片段中包含constreduce=
。