重写lodash

1:thunk

 

 

 2:compact

 

 

 3:concat

 

4:difference

 

 5:differenceWith

 6:omit 

 

 7:pick

 

 8:drop

9:dropRight
 

 10 deepMerge

/**
 * 深度合并对象
 *
 * @param {Object} target 目标对象
 * @param {Object} source 源对象
 * @returns {Object} 目标对象
 */
export const deepMerge =(target, source)=> {
    Object.keys(source).forEach(key => {
        target[key] = target[key] && typeof target[key] === 'object' ? deepMerge(target[key], source[key]) : source[key]
    })
    return target
}
11:CloneDeep
 

const isComplexDataType = obj => {
  (typeof obj === 'object' || typeof obj === 'function') && obj !== null
}
const deepClone = (obj, hash = new WeakMap()) => {
  if (hash.has(obj)) { return hash.get(obj) }
  const type = [Date, RegExp, Set, Map, WeakMap, WeakSet]
  if (type.includes(obj.constructor)) {
    return new obj.constructor(obj)
  }
  const allDesc = Object.getOwnPropertyDescriptors(obj)
  const cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc) // 继承原型
  hash.set(obj, cloneObj)
  Reflect.ownKeys(obj).forEach(key => {
    cloneObj[key] = isComplexDataType(obj[key]) ? deepClone(obj[key], hash) : obj[key]
  })
  return cloneObj
}

 

12: get 

 

 

 

 

export const getValueByPath = (object, path, defaultValue) => {
   const arr = !Array.isArray(path) ? path.replace(/\[/g, '.').replace(/\]/g, '').split('.'): path
  return arr.reduce((o, k) => (o || {})[k], object) || defaultValue
}

 

posted on 2019-12-10 18:02  冰love  阅读(287)  评论(0编辑  收藏  举报

导航