JS-41-underscore03-Arrays

underscore为Array提供了许多工具类方法,可以更方便快捷地操作Array

一、first / last

顾名思义,这两个函数分别取第一个和最后一个元素:

var arr = [2, 4, 6, 8];
_.first(arr); // 2
_.last(arr); // 8

二、flatten

flatten()接收一个Array,无论这个Array里面嵌套了多少个Arrayflatten()最后都把它们变成一个一维数组

_.flatten([1, [2], [3, [[4], [5]]]]); // [1, 2, 3, 4, 5]

三、zip / unzip

zip()把两个或多个数组的所有元素按索引对齐,然后按索引合并成新数组。

例如,你有一个Array保存了名字,另一个Array保存了分数,现在,要把名字和分数给对上,用zip()轻松实现:

var names = ['Adam', 'Lisa', 'Bart'];
var scores = [85, 92, 59];
_.zip(names, scores);
// [['Adam', 85], ['Lisa', 92], ['Bart', 59]]

unzip()则是反过来:

var namesAndScores = [['Adam', 85], ['Lisa', 92], ['Bart', 59]];
_.unzip(namesAndScores);
// [['Adam', 'Lisa', 'Bart'], [85, 92, 59]]

四、object

有时候你会想,与其用zip(),为啥不把名字和分数直接对应成Object呢?别急,object()函数就是干这个的:

var names = ['Adam', 'Lisa', 'Bart'];
var scores = [85, 92, 59];
_.object(names, scores);
// {Adam: 85, Lisa: 92, Bart: 59}

注意_.object()是一个函数,不是JavaScript的Object对象。

五、range

range()让你快速生成一个序列,不再需要用for循环实现了:

// 从0开始小于10:
_.range(10); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]// 从1开始小于11:
_.range(1, 11); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]// 从0开始小于30,步长5:
_.range(0, 30, 5); // [0, 5, 10, 15, 20, 25]// 从0开始大于-10,步长-1:
_.range(0, -10, -1); // [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

六、without / difference

without 语法:

_.without(array, *values)

返回一个删除所有 values 值后的 array 副本。

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
//=> [2, 3, 4]

 

difference语法:

_.difference(array, *others)

类似于 without,但返回的值来自 array 参数数组,并且不存在于 other 数组。

_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
//=> [1, 3, 4]

七、union / intersection

union 语法:

_.union(*arrays)

返回传入的 arrays(数组)并集:按顺序返回,返回数组的元素是唯一的,可以传入一个或多个 arrays (数组)。

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

intersection 语法:

_.intersection(*arrays)

返回传入 arrays(数组)交集。结果中的每个值是存在于传入的每个 arrays(数组)里。

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
//=> [1, 2]

八、uniq

语法:

_.uniq(array, [isSorted], [iteratee])

 返回 array 去重后的副本。

 如果您确定 array 已经排序, 那么给 isSorted 参数传递 true 值, 此函数将运行的更快的算法。 如果要处理对象元素, 传递 iteratee 函数来获取要对比的属性。

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

更多完整的函数请参考underscore的文档:Underscore.js 简介 | Underscore.js中文文档 | Underscore.js中文网 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的pytest框架(2)--断言机制

接上篇文章,我们使用pytest框架,实现自动发现并执行用例,接着利用断言语句判断测试结果,最后生成报告。这篇文章我们就断言机制来展开,深入学习进阶pytest框架的断言机制: 目录 一、基本断言 使用Python…

1688官方API商品数据采集接口|阿里巴巴中国站获得1688商品详情 API 返回值说明

随着全球经济一体化和电子商务的快速发展,网络购物的需求日益增加。不断涌现的电商企业使得行业的竞争情况愈演愈烈。在这种情况下,企业不仅要加大经营力度,还要在自己的基础设施和技术上持续投入,才能更好的适应市场和消费习惯。…

飞桨Ai(一)基于训练后的模型进行信息提取

基准 本博客基于如下视频: 发票抬头信息抽取之环境搭建 - 基于飞浆开源项目发票抬头信息抽取之数据标准模型训练 - 基于飞浆开源项目 步骤 1、准备工作 下载python:【Python】Windows:Python 3.9.2 下载和安装(建议3.9&#…

算法第42天动态规划4

416 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等 def canPartition(nums:List[int])->bool:total_sumsum(nums)if total_sum%2!0:return Falsetarget_sumtotal_sum//2dp[[Fal…

数通HCIE考试分享:考前心态很重要,心情放松好过一次练习

誉天数通HCIE晚班火热预约中!真机实验考前辅导备考资料,名师保驾护航,助你稳定通关!识别二维码,即可获取免费试听名额! 备考阶段 我是去年10月底完成了笔试考试,在笔试之前就将PY的课程过了一遍…

Spark面试整理-Spark集成Kafka

Apache Spark和Apache Kafka的集成使得实时数据流处理成为可能。Kafka是一个分布式流处理平台,主要用于构建实时数据管道和流应用。而Spark是一个大规模数据处理工具,可以对大量数据进行批处理和实时处理。 Spark集成Kafka主要通过Spark Streaming或者Structured Streaming实…

AI-Agent入门

主要参考资料 AI Agent(或者LLM Agent)深度讲解——组成、方法、案例及展望: https://zhuanlan.zhihu.com/p/676544930 产品经理研读:Agent的九种设计模式(图解代码): https://mp.weixin.qq.com/s/9CRzuNgnwyq3-tkqnTA6TA 特工宇宙与产品二姐…

力扣算法-回溯

递归 104.二叉树的最大深度 回溯 17.电话号码的字母组合 ①子集型回溯 78.子集 (1)选不选 (2)选哪个 131.分割回文串 (1593.拆分字符串使唯一子字符串的数目最大 也可以用这个思路解:从结果角度,分割字符串) ②组合型回溯…

[leetcode] 55. 跳跃游戏

文章目录 题目描述解题方法模拟java代码复杂度分析 相似题目 题目描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 tr…

CentOS系统常用命令

CentOS系统是基于Red Hat Enterprise Linux(RHEL)的流行Linux发行版,它在服务器和桌面环境中广泛使用。以下是一些在CentOS系统中常用的命令及其用法: 1. **文件和目录操作** - ls:列出目录内容ls -lh # 以易读的格式…

SqL--DCL数据控制语言

文章目录 数据控制语言用户角色 赋权收权删除用户自定义角色 数据控制语言 用户 用户:用来登录数据库的账号 需要有权限的用户或者管理员用户system 创建用户: 语法: CREATE USER 用户名 IDENTIFIED BY 密码;注意:1.此时的用户…

杀死那个名为360安全的软件

背景 2023年底,闲来没事想起了xjun师傅2021年发的procexp驱动利用帖子时在群里讨论的,通过procexp驱动突破PPL后注入到csrss进程中,再通过csrss来结束那些个安全防护软件。于是在当时就有了如下成果: 这些弄完之后,觉…

冯诺依曼与进程【Linux】

文章目录 冯诺依曼体系结构(从硬件的角度描述)冯诺依曼体系结构(从软件的角度描述)操作系统(软件)理解管理系统调用和库函数进程查看进程的两种方式 通过系统调用获取进程的PID和PPID通过系统调用创建进程-…

C++ Primer是每位C++ coder心中的圣经吗?

首先,C Primer的作者是Stanley B. Lippman、Jos Lajoie和Barbara E. Moo。Stanley B. Lippman是C领域的知名专家,他在C标准委员会中担任过要职,对C语言的发展有深刻的理解。Jos Lajoie和Barbara E. Moo也都是C领域的资深专家,他们…

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测(完整源码…

QT QThread +信号量 实现生成者和消费者

//本文详细描述QT 中QThread 信号量 实现生成者和消费者。 //调试通过。 //这个例子演示了怎样使用QSemaphore 信号量来保护对生成者线程和消费者线程共享的环形缓冲 //区的访问。 //生成者向缓冲区中写入数据,直到达到缓冲区的终点,这时它会从起点重…

各大厂都推出鸿蒙APP了,你就一定要学习一下鸿蒙APP测试了!

2023年8月,华为推出鸿蒙4.0,由于其广泛的用户基础和品牌传播力,在短短几个月的时间,使用鸿蒙4.0系统的设备就达到千万级别,并且在9月份发售Mate 6之后,还在装机量的增长更加迅猛。 基于此,11月…

AMD新一代AI PC芯片惊艳登场!颠覆商业计算领域!

AMD发布新一代AI PC芯片 前言 就在北京时间4月17日,AMD正式面向商业计算领域推出新一代AI PC创新产品!他们宣布推出锐龙Pro 8040系列和AMD锐龙Pro 8000系列,扩展其商用移动和桌面AI个人电脑(PC)产品组合。 了解PRO 804…

【Vue3】setup语法糖的使用

文章目录 setup简介使用vite-plugin-vue-setup-extend插件 指定组件名字 setup简介 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖 相比较普通的<script> ,它有以下优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯…

基于SpringBoot的“人职匹配推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“人职匹配推荐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 网上商城购物系统结构图 管理员登录界面图 个…