[Ramda] Get a List of Unique Values From Nested Arrays with Ramda (flatMap --> Chain)
In this lesson, we'll grab arrays of values from other arrays, resulting in a nested array. From there, we'll look at multiple ways to flatten the array structure using composition with map
and unnest
and then refactoring to use chain
, AKA flatMap
. Finally, we'll add Ramda's uniq
function to remove duplicate values.
const R = require('ramda'); const {map, chain, prop, pluck, compose, uniq, tap, curry} = R; const product = { name: "Sample Data", sizes: [ { name: "L", colors: [ { name: "Red" }, { name: "Blue" } ] }, { name: "M", colors: [ { name: "Green" }, { name: "Yellow" } ] }, { name: "S", colors: [ { name: "Orange" }, { name: "Purple" }, { name: "Blue" } ] } ] }; const log = curry((desc, x) => R.tap(() => console.log(desc, JSON.stringify(x, null, 2)), x)); // Target: to get unique array of color from product object const sizes = prop('sizes'); const getColors = chain(prop('colors')); // flatMap, get colors props from array of objects const getColorNames = pluck('name'); // get name prop from array of objects const res = compose( uniq, log("after name"), getColorNames, log("after colors"), getColors, log("after sizes"), sizes )(product); console.log(JSON.stringify(res, null, 2)); /* * after sizes [ { "name": "L", "colors": [ { "name": "Red" }, { "name": "Blue" } ] }, { "name": "M", "colors": [ { "name": "Green" }, { "name": "Yellow" } ] }, { "name": "S", "colors": [ { "name": "Orange" }, { "name": "Purple" }, { "name": "Blue" } ] } ] after colors [ { "name": "Red" }, { "name": "Blue" }, { "name": "Green" }, { "name": "Yellow" }, { "name": "Orange" }, { "name": "Purple" }, { "name": "Blue" } ] after name [ "Red", "Blue", "Green", "Yellow", "Orange", "Purple", "Blue" ] [ "Red", "Blue", "Green", "Yellow", "Orange", "Purple" ] * */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-02-28 [Hapi.js] Serving static files
2016-02-28 [Hapi.js] Using the response object
2016-02-28 [Hapi.js] Replying to Requests
2016-02-28 [Hapi.js] Route parameters
2016-02-28 [Hapi.js] Logging with good and good-console