zoukankan      html  css  js  c++  java
  • [Javascript Crocks] Safely Access Object Properties with `prop`

    In this lesson, we’ll use a Maybe to safely operate on properties of an object that could be undefined. We’ll use our initial code as the basis for a prop utility function that can be reused with different objects and various property names. Instead of just blindly asking for a property, this version of prop will drop us into the safe confines of a Maybe, giving us a Just when the property exists and a Nothing for an undefined property. Once we’ve built up our own prop utility, we’ll refactor the code one more time to take advantage of the built-in proputility provided by the crocks library.

    When you want to pull out a value from object or array, you might doing like this:

    const safe = require('crocks/Maybe/safe');
    const { inc } = require('./utils');
    const { not, compose, isNil, prop } = require('ramda');
    
    // check the value is not undefined or null
    const isNotNil = safe(compose(not, isNil));
    // check object's prop value is not undefined or null
    const safeProp = propName => obj => isNotNil(prop(propName, obj));
    // get 'page' prop from the object as Maybe type
    const safePage = safeProp('page');
    // data
    const qs = { page: 4, pageSize: 10, totalPages: 203 };
    //default value is 1
    const result = safePage(qs).option(1);
    
    console.log(result); // 4

    Actually from the code above we write many code, we use Ramda lib for utils functions and  safe prop method.

    const { not, compose, isNil, prop } = require('ramda');
    
    const isNotNil = safe(compose(not, isNil));
    const safeProp = propName => obj => isNotNil(prop(propName, obj));

    Actually crocks lib provide 'prop' method to simply the code:

    const prop = require('crocks/Maybe/prop');
    const { inc } = require('./utils');
    
    const safePage = prop('page');
    
    const qs = { page: 4, pageSize: 10, totalPages: 203 };
    const result = safePage(qs).option(1);
    
    console.log(result);
  • 相关阅读:
    python3.7中asyncio的具体实现
    Nginx开启gzip压缩解决react打包文件过大
    使用Promise发送多个异步请求, 全部完成后再执行
    React 轮播图实现
    scrapy学习
    我的react+material-ui之路
    QQ小橙团队排表机器人使用方法
    P5569 [SDOI2008] 石子合并 解题报告
    NOIP/CSP 做题记录
    CF923E Perpetual Subtraction 解题报告
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9026342.html
Copyright © 2011-2022 走看看