当前位置:首页 > 科技  > 软件

你还在用sort排序?分享30个用的最频繁的lodash工具函数

来源: 责编: 时间:2024-04-28 17:19:04 252观看
导读前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。事情起因是,有几个小伙伴在对一个数据进行排序,做了激烈的讨论,这组数据,想要根据num字段进行排序~把我气的,你们就不能直接

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。y1O28资讯网——每日最新资讯28at.com

事情起因是,有几个小伙伴在对一个数据进行排序,做了激烈的讨论,这组数据,想要根据num字段进行排序~把我气的,你们就不能直接用lodash的sortBy吗?你们再怎么实现,能实现得比lodash好?y1O28资讯网——每日最新资讯28at.com

const arr = [    {num: 3,name: 'hh'},    {num: 1,name: 'xx'},    {num: 2,name: 'aa'}]// 使用lodashconsole.log(_.sortBy(arr, ['num']))

所以,我觉得有必要跟各位小伙伴分享一下,我在项目中用的最多的30个lodash工具方法y1O28资讯网——每日最新资讯28at.com

注:此文是总结一些常用的lodash方法,案例从文档拿的,介意的朋友请勿看~y1O28资讯网——每日最新资讯28at.com

我要对数组进行一系列操作!

取「交集」!

intersection

返回一个包含所有传入数组交集元素的新数组。y1O28资讯网——每日最新资讯28at.com

_.intersection([2, 1], [4, 2], [1, 2]);  // => [2]

intersectionBy

根据某个字段来进行计算交集y1O28资讯网——每日最新资讯28at.com

_.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');  // => [{ 'x': 1 }]

intersectionWith

根据某个条件函数来计算交集,比如使用isEqualy1O28资讯网——每日最新资讯28at.com

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];  var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];    _.intersectionWith(objects, others, _.isEqual);  // => [{ 'x': 1, 'y': 2 }]

取「合集」!

union

返回一个新的联合数组。y1O28资讯网——每日最新资讯28at.com

_.union([2], [1, 2]);  // => [2, 1]

unionBy

根据某个字段来计算合集y1O28资讯网——每日最新资讯28at.com

_.unionBy([{ 'x': 1, 'y': 5 }], [{ 'x': 2, 'y': 3 }, { 'x': 1, 'y': 6 }], 'x');  // => [{ 'x': 1, 'y': 5 }, { 'x': 2, 'y': 3 }]

unionWith

根据某个条件函数来计算合集y1O28资讯网——每日最新资讯28at.com

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];  var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];    _.unionWith(objects, others, _.isEqual);  // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]

取「差集」!

同上面两种工具函数,这里无需多言~y1O28资讯网——每日最新资讯28at.com

  • difference
  • differenceBy
  • differenceWith

取数组「总和」!

sum

返回总和。y1O28资讯网——每日最新资讯28at.com

_.sum([4, 2, 8, 6]);  // => 20

sumBy

根据某个字段计算并返回总和。y1O28资讯网——每日最新资讯28at.com

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];    _.sumBy(objects, function(o) { return o.n; });  // => 20    // The `_.property` iteratee shorthand.  _.sumBy(objects, 'n');  // => 20

取「平均数」!

mean

计算平均数y1O28资讯网——每日最新资讯28at.com

_.mean([4, 2, 8, 6]);  // => 5

meanBy

根据某个字段计算出平均值y1O28资讯网——每日最新资讯28at.com

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];    _.meanBy(objects, function(o) { return o.n; });  // => 5    // The `_.property` iteratee shorthand.  _.meanBy(objects, 'n');  // => 5

根据字段或条件「排序」!

sortBy

var users = [  { 'user': 'fred', 'age': 48 },  { 'user': 'barney', 'age': 36 },  { 'user': 'fred', 'age': 40 },  { 'user': 'barney', 'age': 34 }  ];    _.sortBy(users, function(o) { return o.user; });  // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]    _.sortBy(users, ['user', 'age']);  // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]    _.sortBy(users, 'user', function(o) {  return Math.floor(o.age / 10);  });  // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]

超级实用的工具函数!

我要「浅拷贝」!

clone

const obj1 = [{a: 1 }]const obj2 = _.clone(obj1)console.log(obj1 === obj2) // falseconsole.log(obj1.a === obj2.a) // true

我要「深拷贝」!

cloneDeep

const obj1 = [{a: 1 }]const obj2 = _.cloneDeep(obj1)console.log(obj1 === obj2) // falseconsole.log(obj1.a === obj2.a) // false

debounce 我要「防抖」!

参数

  1. func  (Function)
  2. [wait=0]  (number)
  3. [optinotallow=]  (Object)
  4. [options.leading=false]  (boolean)
  5. [options.maxWait]  (number) : 设置 func 允许被延迟的最大值。
  6. [options.trailing=true]  (boolean)

返回

(Function)y1O28资讯网——每日最新资讯28at.com

例子

// 避免窗口在变动时出现昂贵的计算开销。jQuery(window).on('resize', _.debounce(calculateLayout, 150)); // 当点击时 `sendMail` 随后就被调用。jQuery(element).on('click', _.debounce(sendMail, 300, {  'leading': true,  'trailing': false})); // 确保 `batchLog` 调用1次之后,1秒内会被触发。var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });var source = new EventSource('/stream');jQuery(source).on('message', debounced); // 取消一个 trailing 的防抖动调用jQuery(window).on('popstate', debounced.cancel);

throttle 我要「节流」!

参数

  1. func  (Function)
  2. [wait=0]  (number)
  3. [optinotallow=]  (Object)
  4. [options.leading=true]  (boolean)
  5. [options.trailing=true]  (boolean)

返回

(Function)y1O28资讯网——每日最新资讯28at.com

例子

// 避免在滚动时过分的更新定位jQuery(window).on('scroll', _.throttle(updatePosition, 100)); // 点击后就调用 `renewToken`,但5分钟内超过1次。var throttled = _.throttle(renewToken, 300000, { 'trailing': false });jQuery(element).on('click', throttled); // 取消一个 trailing 的节流调用。jQuery(window).on('popstate', throttled.cancel);

我「获取」对象中的某几个字段!

pick

var object = { 'a': 1, 'b': '2', 'c': 3 };    _.pick(object, ['a', 'c']);  // => { 'a': 1, 'c': 3 }

我要「剔除」掉对象中的某几个字段!

omit

var object = { 'a': 1, 'b': '2', 'c': 3 };    _.omit(object, ['a', 'c']);  // => { 'b': '2' }

我要判断一个变量的类型!

isUndefined

如果 value 是 undefined ,那么返回 true,否则返回 falsey1O28资讯网——每日最新资讯28at.com

_.isUndefined(undefined);  // => true    _.isUndefined(null);  // => false

isNull

如果 value 为null,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isNull(null);  // => true    _.isNull(undefined);  // => false

isString

如果 value 为一个字符串,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isString('abc');  // => true    _.isString(1);  // => false

isPlainObject

如果 value 为一个普通对象,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

function Foo() {  this.a = 1;  }    _.isPlainObject(new Foo);  // => false    _.isPlainObject([1, 2, 3]);  // => false    _.isPlainObject({ 'x': 0, 'y': 0 });  // => true    _.isPlainObject(Object.create(null));  // => true

isNumber

如果 value 为一个数值,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isNumber(3);  // => true    _.isNumber(Number.MIN_VALUE);  // => true    _.isNumber(Infinity);  // => true    _.isNumber('3');  // => false

isArray

如果value是一个数组返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isArray([1, 2, 3]);  // => true    _.isArray(document.body.children);  // => false    _.isArray('abc');  // => false    _.isArray(_.noop);  // => false

isBoolean

如果 value 是一个布尔值,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isBoolean(false);  // => true    _.isBoolean(null);  // => false

isFunction

如果 value 是一个函数,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isFunction(function(){});  // => true    _.isFunction('');  // => false

isNill

如果 value 为null 或 undefined,那么返回 true,否则返回 false。y1O28资讯网——每日最新资讯28at.com

_.isNil(null);  // => true    _.isNil(void 0);  // => true    _.isNil(NaN);  // => fals


y1O28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86206-0.html你还在用sort排序?分享30个用的最频繁的lodash工具函数

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Next.js 14 初学者指南

下一篇: 探索MVVM Toolkit:简化.NET应用开发,构建高效MVVM架构

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
Top