2017-10-05 94 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]; 
}, [])