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);
    }
  };
}
相关推荐
dagouaofei5 小时前
全面整理6款文档生成PPT工具,PDF转PPT不再难
python·pdf·powerpoint
β添砖java5 小时前
python第一阶段第10章
开发语言·python
codergjw5 小时前
常见面试题
java
咕噜企业分发小米5 小时前
如何平衡服务器内存使用率和系统稳定性?
java·服务器·前端
李子园的李5 小时前
函数式编程与传统编程的对比——基于java
java
爬山算法5 小时前
Netty(13)Netty中的事件和回调机制
java·前端·算法
CoovallyAIHub5 小时前
是什么支撑L3自动驾驶落地?读懂AI驾驶与碰撞预测
深度学习·算法·计算机视觉
玉树临风ives5 小时前
atcoder ABC436 题解
c++·算法·leetcode·atcoder·信息学奥赛
伊玛目的门徒5 小时前
HTTP SSE 流式响应处理:调用腾讯 智能应用开发平台ADP智能体的 API
python·网络协议·http·腾讯智能体·adp·智能应用开发平台
倔强的小石头_5 小时前
Python 从入门到实战(八):类(面向对象的 “对象模板”)
服务器·开发语言·python