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"
    ]
    * */
  • 相关阅读:
    显示器接口
    常用英语-持续更新
    Web Service
    单元测试--Moq
    单元测试--Xunit
    Asp.Net WebApi 跨域问题
    VS中常用的快捷键
    单元测试--最佳实践
    设计模式--建造者模式
    windows10搭建GitBucket服务器(1)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6480706.html
Copyright © 2011-2022 走看看