热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jsforeach用法_1.underscore.js介绍

对于underscore.js这个库可能有人没有听说过,所以在本专栏开始之前,这里为大家介绍一下underscore.js这个库是什么?怎

对于 underscore.js这个库可能有人没有听说过,所以在本专栏开始之前,这里为大家介绍一下 underscore.js这个库是什么?怎么用?现在的影响力等等。

如果你已经知道了 underscore.js 是什么,那么你完全可以跳过这一节内容直接进入源码解析环节。

underscore.js 与 lodash

也许你没有听说过 underscore.js但是却听说过或用过 lodash,其实这两者之间是有关系的,underscore.js是在 Node.js出现前我们会使用的一个库。而随着 Node.js的兴起,underscore.js将自身代码迁移到 npm平台上形成了 lodash。这样做的好处 就是当我们使用到一个确切的内部函数的时候可以实现按需引入,这样在效率上就大大提升了,并且 lodash目前也在不断的维护。

underscore.js 是什么

官网上是这样解释的:

Underscore是一个 Javascript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 Javascript 内置对象。 他解决了这个问题:“如果我面对一个空白的 HTML 页面,并希望立即开始工作,我需要什么?” 他弥补了jQuery没有实现的功能,同时又是Backbone必不可少的部分。

也就是说 underscore.js的出现是为了解决早期的js语言本身对数据的处理的薄弱,所以制作的一套函数式编程的库。

Underscore 提供了100多个函数,包括常用的:mapfilterinvoke— 当然还有更多专业的辅助函数,如:函数绑定、Javascript 模板功能、创建快速索引、强类型相等测试等等。

源码下载

对于其开发环境的源码的下载我们可以直接点击链接,选择开发环境是为了便于阅读没有压缩过的代码。

简单用法

这里展示一个数组去重函数的使用方法:

const arr = [1, 2, 3, 4, 5, 1, 2];
const res = _.unique(arr);
console.log(res); // [1, 2, 3, 4, 5]

除了直接将 _作为一个对象使用其unique方法之外,我们还可以将其当作一个函数来调用:

const arr = [1, 2, 3, 4, 5, 1, 2];
const res = _(arr).unique();
console.log(res); // [1, 2, 3, 4, 5]

流式编程

如果你熟悉 java你肯定听说过流式编程这个名词,其实写法类似于 jQuery中的链式调用。意思就是我们可以为数据进行多次处理,最终得到处理后的结果。例如,我们先将一个数组进行去重,然后将数组中的每一个数字都乘以 2 :

const arr = [1, 2, 3, 4, 5, 1, 2];
const res = _.chain(arr).unique().map(item => item * 2).value();
console.log(res); // [2, 4, 6, 8, 10]

当然也可以采用直接调用 _的形式:

const arr = [1, 2, 3, 4, 5, 1, 2];
const res = _(arr).chain().unique().map(item => item * 2).value();
console.log(res); // [2, 4, 6, 8, 10]

总结

介绍完 underscore.js这个库和它的基本使用后,我们来总结一下。

之前在jQuery的源码分析中我们说过,我们现在对 jQuery的依赖减少了,因为它其中很多优秀的设计比如promise已经被写入了语言的规范,我们已经不需要使用这些库,仅仅使用语言本身提供的 API 就可以实现。相同,对于 underscore.js也一样,随着 ES6mapsomefilterreduceforEachany等方法的出现,我们对underscore.js本身的依赖也减少了。

既然我们对这些成功的库的依赖减少了但是为什么还要学习它们呢?

我们虽然对它们的依赖减少了,但是学习其内部的设计思想,这对于我们以后的发展,或者是也需要造轮子是有着极大的帮助的。要想写出好的代码就必须看源码向大佬们学习。

还犹豫什么呢?一起跟我进行 underscore.js的源码解读吧!!!



推荐阅读
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
    本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
author-avatar
手机用户2602937435
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有