zoukankan      html  css  js  c++  java
  • [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"
    ]
    * */
  • 相关阅读:
    “冷面杀手”王励勤赢了
    当VS.NET 无法调试时,不妨尝试一下下面的办法
    Oracle如何调用Windows动态链接库
    根本不值得一提的乒乓球国手王浩
    向总版主提一些建议
    你的家乡话,你还知多少
    黄山三日游(200706020604)
    今天是我的生日,常怀感恩的心
    如果有一个工具可以帮助你将你的代码可视化,你需要吗?
    是社会变化太快,还是我心态有有点怪
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6480706.html
Copyright © 2011-2022 走看看