zoukankan      html  css  js  c++  java
  • 手写lodash.get

    1.简单版

    /**
     * @param {object} source
     * @param {string | string[]} path
     * @param {any} [defaultValue]
     * @return {any}
     */
    function get(source, path, defaultValue = undefined) {
     if(typeof object !== 'object') {
      return defaultValue
     }
     if(Array.isArray(path) && !path.length) {
        return defaultValue
      }
      if(typeof path === "string" && !path.trim().length) {
        return defaultValue
      }
      const paths = Array.isArray(path) ? path : path.replace(/[/g, '.').replace(/]/g, '').split('.');
      return paths.reduce((cur, pre) => (cur || {})[pre], source) || defaultValue;
    }
    

      

      

      

    2.完整版

    function isDef(target) {
      return target !== undefined && target !== null;
    }
    
    function nextSplit(key) {
      const cartfulIndexs = [];
      const regx = /[(d+)]/g;
      let wholeKey = key;
      let matchResult;
      while ((matchResult = regx.exec(key))) {
        cartfulIndexs.push(matchResult[1]);
      }
      if (cartfulIndexs.length) {
        wholeKey = wholeKey.substring(0, wholeKey.indexOf(cartfulIndexs[0]) - 1);
      }
      return [wholeKey, ...cartfulIndexs];
    }
    
    export function get(target, keyStrs, defaultValue) {
      if (!isDef(target)) return defaultValue;
    
      const keyParts = keyStrs
        .split(".")
        .map(nextSplit)
        .flat();
    
      let value = target;
    
      for (let index = 0; index < keyParts.length; index++) {
        const key = keyParts[index];
        // console.log(key, value);
        if (isDef(value[key])) {
          value = value[key];
        } else {
          return defaultValue;
        }
      }
      return value;
    }
    

      

      

  • 相关阅读:
    读《持续交付2.0》
    “兼职”运维的常用命令
    技术管理者怎样跳出“泥潭”
    使用RabbitMQ实现接口补偿
    dotNET Core 中怎样操作 AD?
    dotNET Core实现分布式环境下的流水号唯一
    Git 远程仓库
    分之管理
    git 基本操作----git diff
    git 基本操作----git reset、log
  • 原文地址:https://www.cnblogs.com/ygunoil/p/15232592.html
Copyright © 2011-2022 走看看