2017-10-05 97 views
0

这是输出(图片1),如果你将记录final阵列从片段1ES6减少方法不返回所需的输出

我试图做的是减少我的数组像所显示的阵列中图像2

我已经使用lodash _.uniqBy() [试图片段2],但仍然输出,我从日志记录reduce变量仍然是输出从图片1。如何将我的final阵列减少到输出图片2

enter image description here 图像1

enter image description here

图像2

const reduce = final.reduce((x, y) => { 
    if (x.department !== y.department) { 
    return x; 
    } 
}) 

console.log(final) 
console.log(reduce); 

片段1

_.uniqBy(final, 'department') 

片段2

UPDATE

这是打字稿.ts.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); 
+2

你总是返回累加器减少功能 – MinusFour

+4

这不是你如何使用'reduce'对象。 – str

+0

我明白了,那么有什么可能是最好的解决方案,以减少我的最终阵列到图像2的输出? – Vadamadafaka

回答

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()); 
+0

您好@MinusFor,我在传递Map中的final.map时出现了一些lint错误,错误说void []类型的参数不可转让 – Vadamadafaka

+0

您正在使用typescript? – MinusFour

+0

yess @MinusFour – Vadamadafaka

2

随着reduce,你总是会修改同一个对象,并将其返回。提供起始值总是更容易(在这种情况下为{})。 {}在任何时候都是你的obj。要分配唯一值(item s),请将它们分配给obj[item.department]。不要忘了returnobj最后。

const reduce = Object.values(final.reduce((obj, item) => { 
    obj[item.department] = item; 
    return obj; 
}, {})); 

With Object.values您只检索缩小对象的值。

+0

嗨有@Xufox我试过片段,但返回值仍然是图片1中的输出 – Vadamadafaka

+0

@Vadamadafaka这是不可能的。请更新您的问题,并将您的实际'final'数组粘贴为纯文本(而不是图像)并将其格式化为代码('{}'按钮)。 – Xufox

+0

这个表达式没有被分配给任何东西,所以你需要把它放在某处 – MinusFour

1

如前所述,您需要提供累加器作为第一个参数以减少回调。检查这个链接:Array.prototype.reduce。不知道如果这是你想要的,但是这个代码将会给你阵列具有唯一department

final.reduce((res, item) => { 
    return res.find(({ departament }) => departament === item.departament) ? res : [res, item]; 
}, [])