lodash中常用的50个js工具函数

  1. chunk:将数组分割成指定大小的块
function chunk(array, size) {
  const result = [];
  for (let i = 0; i < array.length; i += size) {
    result.push(array.slice(i, i + size));
  }
  return result;
}
  1. compact:过滤数组中的假值
function compact(array) {
  return array.filter(Boolean);
}
  1. concat:合并多个数组
function concat(...arrays) {
  return [].concat(...arrays);
}
  1. difference:返回两个数组的差异
function difference(array, values) {
  return array.filter(item => !values.includes(item));
}
  1. drop:从数组的开头删除指定数量的元素
function drop(array, n = 1) {
  return array.slice(n);
}
  1. dropRight:从数组的末尾删除指定数量的元素
function dropRight(array, n = 1) {
  return array.slice(0, -n);
}
  1. fill:用指定的值填充数组
function fill(array, value, start = 0, end = array.length) {
  for (let i = start; i < end; i++) {
    array[i] = value;
  }
  return array;
}
  1. findIndex:返回第一个满足条件的元素的索引
function findIndex(array, predicate) {
  for (let i = 0; i < array.length; i++) {
    if (predicate(array[i], i, array)) {
      return i;
    }
  }
  return -1;
}
  1. flatten:将多维数组扁平化
function flatten(array) {
  return array.reduce((result, item) => {
    if (Array.isArray(item)) {
      result.push(...flatten(item));
    } else {
      result.push(item);
    }
    return result;
  }, []);
}
  1. intersection:返回多个数组的交集
function intersection(...arrays) {
  return arrays.reduce((result, array) => {
    return result.filter(item => array.includes(item));
  });
}
  1. join:将数组的所有元素转换为字符串并连接起来
function join(array, separator = ',') {
  return array.join(separator);
}
  1. last:返回数组的最后一个元素
function last(array) {
  return array[array.length - 1];
}
  1. map:对数组中的每个元素执行指定的函数,并返回结果数组
function map(array, iteratee) {
  return array.map(iteratee);
}
  1. max:返回数组中的最大值
function max(array) {
  return Math.max(...array);
}
  1. min:返回数组中的最小值
function min(array) {
  return Math.min(...array);
}
  1. pull:从数组中删除指定的值
function pull(array, ...values) {
  return array.filter(item => !values.includes(item));
}
  1. reverse:反转数组的顺序
function reverse(array) {
  return array.reverse();
}
  1. slice:返回数组的指定部分
function slice(array, start = 0, end = array.length) {
  return array.slice(start, end);
}
  1. sortBy:根据指定的属性排序数组
function sortBy(array, iteratee) {
  return array.sort((a, b) => {
    const valueA = typeof iteratee === 'function' ? iteratee(a) : a[iteratee];
    const valueB = typeof iteratee === 'function' ? iteratee(b) : b[iteratee];
    return valueA - valueB;
  });
}
  1. sum:计算数组中所有元素的总和
function sum(array) {
  return array.reduce((result, item) => result + item, 0);
}
  1. take:返回数组的前n个元素
function take(array, n = 1) {
  return array.slice(0, n);
}
  1. union:返回多个数组的并集
function union(...arrays) {
  return arrays.reduce((result, array) => {
    return [...result, ...array.filter(item => !result.includes(item))];
  });
}
  1. uniq:返回数组中的唯一值
function uniq(array) {
  return [...new Set(array)];
}
  1. without:从数组中删除指定的值
function without(array, ...values) {
  return array.filter(item => !values.includes(item));
}
  1. zip:将多个数组的元素按索引合并为一个新数组
function zip(...arrays) {
  const maxLength = Math.max(...arrays.map(array => array.length));
  const result = [];
  for (let i = 0; i < maxLength; i++) {
    result.push(arrays.map(array => array[i]));
  }
  return result;
}
  1. countBy:根据指定的条件对数组进行分组,并返回每个分组的数量
function countBy(array, iteratee) {
  return array.reduce((result, item) => {
    const key = typeof iteratee === 'function' ? iteratee(item) : item[iteratee];
    result[key] = (result[key] || 0) + 1;
    return result;
  }, {});
}
  1. every:检查数组中的所有元素是否满足指定的条件
function every(array, predicate) {
  return array.every(predicate);
}
  1. filter:根据指定的条件过滤数组中的元素
function filter(array, predicate) {
  return array.filter(predicate);
}
  1. find:返回第一个满足条件的元素
function find(array, predicate) {
  return array.find(predicate);
}
  1. flatMap:对数组中的每个元素执行指定的函数,并将结果扁平化
function flatMap(array, iteratee) {
  return array.flatMap(iteratee);
}
  1. forEach:对数组中的每个元素执行指定的函数
function forEach(array, iteratee) {
  array.forEach(iteratee);
}
  1. groupBy:根据指定的条件对数组进行分组
function groupBy(array, iteratee) {
  return array.reduce((result, item) => {
    const key = typeof iteratee === 'function' ? iteratee(item) : item[iteratee];
    if (!result[key]) {
      result[key] = [];
    }
    result[key].push(item);
    return result;
  }, {});
}
  1. includes:检查数组是否包含指定的值
function includes(array, value, fromIndex = 0) {
  return array.includes(value, fromIndex);
}
  1. keyBy:根据指定的条件将数组转换为对象
function keyBy(array, iteratee) {
  return array.reduce((result, item) => {
    const key = typeof iteratee === 'function' ? iteratee(item) : item[iteratee];
    result[key] = item;
    return result;
  }, {});
}
  1. mapKeys:对对象的键应用指定的函数
function mapKeys(object, iteratee) {
  return Object.keys(object).reduce((result, key) => {
    const newKey = typeof iteratee === 'function' ? iteratee(key) : key[iteratee];
    result[newKey] = object[key];
    return result;
  }, {});
}
  1. mapValues:对对象的值应用指定的函数
function mapValues(object, iteratee) {
  return Object.keys(object).reduce((result, key) => {
    result[key] = typeof iteratee === 'function' ? iteratee(object[key]) : object[key][iteratee];
    return result;
  }, {});
}
  1. omit:从对象中删除指定的属性
function omit(object, ...props) {
  return Object.keys(object).reduce((result, key) => {
    if (!props.includes(key)) {
      result[key] = object[key];
    }
    return result;
  }, {});
}
  1. pick:从对象中选择指定的属性
function pick(object, ...props) {
  return Object.keys(object).reduce((result, key) => {
    if (props.includes(key)) {
      result[key] = object[key];
    }
    return result;
  }, {});
}
  1. reduce:对数组中的元素进行累积计算
function reduce(array, iteratee, accumulator) {
  return array.reduce(iteratee, accumulator);
}
  1. size:返回数组或对象的长度
function size(collection) {
  return Array.isArray(collection) ? collection.length : Object.keys(collection).length;
}
  1. some:检查数组中是否有元素满足指定的条件
function some(array, predicate) {
  return array.some(predicate);
}
  1. sortBy:根据指定的条件对数组进行排序
function sortBy(array, iteratee) {
  return array.sort((a, b) => {
    const valueA = typeof iteratee === 'function' ? iteratee(a) : a[iteratee];
    const valueB = typeof iteratee === 'function' ? iteratee(b) : b[iteratee];
    return valueA - valueB;
  });
}
  1. get:获取对象中指定路径的值
function get(object, path, defaultValue) {
  const keys = path.split('.');
  let result = object;
  for (let key of keys) {
    result = result[key];
    if (result === undefined) {
      return defaultValue;
    }
  }
  return result;
}
  1. set:设置对象中指定路径的值
function set(object, path, value) {
  const keys = path.split('.');
  let result = object;
  for (let i = 0; i < keys.length - 1; i++) {
    const key = keys[i];
    if (!result[key]) {
      result[key] = {};
    }
    result = result[key];
  }
  result[keys[keys.length - 1]] = value;
  return object;
}
  1. debounce:创建一个防抖函数
function debounce(func, wait) {
  let timeout;
  return function(...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => {
      func.apply(this, args);
    }, wait);
  };
}
  1. throttle:创建一个节流函数
function throttle(func, wait) {
  let timeout;
  return function(...args) {
    if (!timeout) {
      timeout = setTimeout(() => {
        func.apply(this, args);
        timeout = null;
      }, wait);
    }
  };
}
  1. memoize:创建一个记忆函数
function memoize(func) {
  const cache = {};
  return function(...args) {
    const key = JSON.stringify(args);
    if (cache[key]) {
      return cache[key];
    }
    const result = func.apply(this, args);
    cache[key] = result;
    return result;
  };
}
  1. curry:创建一个柯里化函数
function curry(func) {
  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    }
    return function(...args2) {
      return curried.apply(this, args.concat(args2));
    };
  };
}
  1. flow:创建一个组合函数
function flow(...funcs) {
  return function(...args) {
    let result = funcs[0].apply(this, args);
    for (let i = 1; i < funcs.length; i++) {
      result = funcs[i].call(this, result);
    }
    return result;
  };
}
  1. identity:返回传入的第一个参数
function identity(value) {
  return value;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容