每日 30 秒之 filterNonUnique
簡介
取出物件陣列中唯一的資料集。
// 該原始碼來自於 https://30secondsofcode.org const filterNonUniqueBy = (arr, fn) => arr.filter((v, i) => arr.every((x, j) => (i === j) === fn(v, x, i, j)));
程式碼分析
程式碼使用了 Array.prototype.filter
來進行遍歷陣列並獲取過濾,通過 Array.prototype.every
和 fn
來對資料項進行判斷是否重複出現過。
使用場景
從後端或者資料庫分別獲取到參加不同馬拉松的使用者並對這些使用者做歸集,通過 filterNonUniqueBy
來尋找只參加過一次馬拉松的使用者。
// 查詢到參加 2019廈門馬拉松的資料 const join2019 = [ { id: 1, name: 'xiaoer', join: ['2019廈門馬拉松', '2018廈門馬拉松'] }, { id: 2, name: 'xiaosi', join: ['2019廈門馬拉松'] }, ] // 查詢到參加 2018年馬拉松的資料 const join2018 = [ { id: 1, name: 'xiaoer', join: ['2019廈門馬拉松', '2018廈門馬拉松'] }, { id: 3, name: 'menty', join: ['2018廈門馬拉松'] }, ] // 合併資料 const users = [...join2019, ...join2018] // 獲取只參加過一次的使用者 // 輸出: // [ //{id: 2, name: "xiaosi", sales: 50000}, //{id: 3, name: "menty", sales: 150000} // ] const joinOnce = filterNonUniqueBy(users, (a, b) => a.id === b.id)
相似程式碼
取出陣列中唯一的資料集。
// 該原始碼來自於 https://30secondsofcode.org const filterNonUnique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i))
打賞&聯絡
如果您感覺有收穫,歡迎給我打賞,以激勵我輸出更多的優質內容。
本文原稿來自 PushMeTop