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;
    }
    

      

      

  • 相关阅读:
    golang动态加载原生代码思路
    boltdb的实现和改进
    如何保证数据掉电不损坏?
    msgpack库的神奇用法
    消息推送与同步协议的思考
    cassandra的gc调优
    tcp链接断开的探测
    加速和监控国际网络
    轻松逃脱某防火墙对ss的探测
    java文件操作之war压缩解压
  • 原文地址:https://www.cnblogs.com/ygunoil/p/15232592.html
Copyright © 2011-2022 走看看