30个常用的lodash工具函数

  1. chunk: 将数组拆分成指定大小的多个数组
javascript 复制代码
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: 过滤数组中的假值(false、null、0、""、undefined 和 NaN)
javascript 复制代码
function compact(array) {
  return array.filter(Boolean);
}
  1. concat: 合并多个数组
javascript 复制代码
function concat(...arrays) {
  return [].concat(...arrays);
}
  1. difference: 返回第一个数组中与其他数组不同的元素
javascript 复制代码
function difference(array, ...values) {
  const set = new Set([].concat(...values));
  return array.filter(item => !set.has(item));
}
  1. drop: 从数组的开头删除指定数量的元素
javascript 复制代码
function drop(array, n = 1) {
  return array.slice(n);
}
  1. dropRight: 从数组的末尾删除指定数量的元素
javascript 复制代码
function dropRight(array, n = 1) {
  return array.slice(0, -n);
}
  1. fill: 使用指定的值填充数组
javascript 复制代码
function fill(array, value, start = 0, end = array.length) {
  return array.map((item, index) => (index >= start && index < end) ? value : item);
}
  1. findIndex: 返回第一个满足条件的元素的索引
javascript 复制代码
function findIndex(array, predicate) {
  for (let i = 0; i < array.length; i++) {
    if (predicate(array[i], i, array)) {
      return i;
    }
  }
  return -1;
}
  1. flatten: 扁平化数组
javascript 复制代码
function flatten(array) {
  return [].concat(...array);
}
  1. fromPairs: 将键值对数组转换为对象
javascript 复制代码
function fromPairs(array) {
  const result = {};
  for (const [key, value] of array) {
    result[key] = value;
  }
  return result;
}
  1. head: 返回数组的第一个元素
javascript 复制代码
function head(array) {
  return array[0];
}
  1. indexOf: 返回指定元素在数组中的索引
javascript 复制代码
function indexOf(array, value, fromIndex = 0) {
  for (let i = fromIndex; i < array.length; i++) {
    if (array[i] === value) {
      return i;
    }
  }
  return -1;
}
  1. initial: 返回数组中除了最后一个元素的所有元素
javascript 复制代码
function initial(array) {
  return array.slice(0, -1);
}
  1. intersection: 返回多个数组中共同存在的元素
javascript 复制代码
function intersection(...arrays) {
  const set = new Set(arrays[0]);
  for (const array of arrays) {
    set.forEach(item => {
      if (!array.includes(item)) {
        set.delete(item);
      }
    });
  }
  return Array.from(set);
}
  1. join: 将数组转换为字符串并使用指定的分隔符连接
javascript 复制代码
function join(array, separator = ',') {
  return array.join(separator);
}
  1. last: 返回数组的最后一个元素
javascript 复制代码
function last(array) {
  return array[array.length - 1];
}
  1. nth: 返回数组中指定索引的元素(支持负数索引)
javascript 复制代码
function nth(array, n = 0) {
  return n >= 0 ? array[n] : array[array.length + n];
}
  1. pull: 从数组中移除指定的值
javascript 复制代码
function pull(array, ...values) {
  return array.filter(item => !values.includes(item));
}
  1. reverse: 反转数组的顺序
javascript 复制代码
function reverse(array) {
  return array.reverse();
}
  1. slice: 返回数组的指定部分
javascript 复制代码
function slice(array, start = 0, end = array.length) {
  return array.slice(start, end);
}
  1. sortedIndex: 返回指定值在已排序数组中应该插入的索引
javascript 复制代码
function sortedIndex(array, value) {
  let low = 0;
  let high = array.length;
  while (low < high) {
    const mid = Math.floorlow + high) / 2);
    if (array[mid] < value) {
      low = mid + 1;
    } else {
      high = mid;
     }
  return low;
}

22.: 返回数组除了第一个元素的所有元素

javascript 复制代码
function tail(array) {
  return array.slice(1);
}
  1. take: 返回数组的前n个元素
javascript 复制代码
function take(array, n = 1) {
  return array.slice(0, n);
}
  1. union: 返回多个数组的并集
javascript 复制代码
function union(...arrays) {
  return Array.from(new Set([].concat(...arrays)));
}
  1. uniq: 返回数组中唯一的元素
javascript 复制代码
function uniq(array) {
  return Array.from(new Set(array));
}
  1. without: 返回数组中除了指定值之外的所有元素
javascript 复制代码
function without(array, ...values) {
  return array.filter(item => !values.includes(item));
}
  1. xor: 返回多个数组的异或集
javascript 复制代码
function xor(...arrays) {
  const count = {};
  for (const array of arrays) {
    for (const item of array) {
      count[item] = (count[item] || 0) + 1;
    }
  }
  return Object.keys(count).filter(item => count[item] === 1);
}
  1. zip: 将多个数组按索引合并为一个数组
javascript 复制代码
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: 根据指定条件对数组进行分组计数
javascript 复制代码
function countBy(array, iteratee) {
  const result = {};
  for (const item of array) {
    const key = typeof iteratee === 'function' ? iteratee(item) : item[iteratee];
    result[key] = (result[key] || 0) + 1;
  }
  return result;
}
  1. debounce: 创建一个防抖函数,延迟执行指定的函数
javascript 复制代码
function debounce(func, wait, immediate = false) {
  let timeout;
  return function(...args) {
    const later = () => {
      timeout = null;
      if (!immediate) {
        func.apply(this, args);
      }
    };
    const callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) {
      func.apply(this, args);
    }
  };
}
相关推荐
漂流瓶jz28 分钟前
UVA-11491 奖品的价值 题解答案代码 算法竞赛入门经典第二版
c++·算法·图论·题解·aoapc·算法竞赛入门经典·uva
Moshow郑锴1 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
海绵宝宝转agent8 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭8 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT9 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071579 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
hetao173383710 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
卷无止境10 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python