一图了解es6常用数据迭代函数map,filter,fill,reduce

news2024/10/2 1:40:23

一、一图胜千言

前端开发中,js数组处理是最常用的,除了for循环外,随着es6的普及,像reduce()、filter()、map()、some()、every()以及…展开属性都是最常用到的。
今天偶然从网上看到这张图,真是眼前一亮,真是一目了然,不用一句解释就让人了解相关函数的用途

在这里插入图片描述

二、重点函数说明

1、map和forEach

map跟forEach功能类似, 但是map有返回值,产生一个新的数组,不改变原来数组,forEach没有返回值

  • map:让数组通过计算产生新的数组
  • forEach:让数组的每一项执行一次操作
const a = [1, 2, 3];
const b = a.map(x => x * 2);
let c=a.forEach(x=>x*2)
console.log(a,b,c);

输出结果:> Array [1, 2, 3] Array [2, 4, 6] undefined

2、filter (过滤)

返回满足条件的新数组,不影响原数组

  • 返回值:Array
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log('原值',words);
console.log('结果',result);
-------------------------------
输出:
> "原值" Array ["spray", "limit", "elite", "exuberant", "destruction", "present"]
> "结果" Array ["exuberant", "destruction", "present"]

3、some(任意)、every(全部)

  • 返回值:Boolean
  • every:判断每一个元素是否全部满足条件, 有的话返回true, 否则false
  • some:判断每一个元素是否有任意一个满足条件, 有的话返回true, 否则false
console.log([1, undefined, 1].some((x) => x !== 1)); // true
console.log([1, 30, 39, 29, 10, 13].every(x=>x<40)); // true

4、reduce (累计)

reduce()方法在数组的每个元素上依次执行用户提供的“reducer”回调函数,并传入前一个元素上的计算返回值,最终计算为一个值

语法

arr.reduce(callback,[initialValue])

  • callback 要为数组中的每个元素执行的函数。它的返回值在下次调用时成为参数的值。对于最后一次调用,返回值变做为最终的返回值
  • initialValue(可选参数) 当设置了initialValue参数时,callback 第一个参数 初始值将默认是 initialValue。
const array = [15, 16, 17, 18, 19];

function reducer(accumulator, currentValue, index) {
  const returns = accumulator + currentValue;
  console.log(
    `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`,
  );
  return returns;
}

array.reduce(reducer);

在这里插入图片描述

默认值的作用

如果组件为空时,不设置默认值,调用reduce会报错,但是设置了默认值后,可以正常执行

var  arr = [];
var sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
})
console.log(arr,sum) // Error: Reduce of empty array with no initial value
var sumDefault = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
},0)
console.log(arr,sumDefault) // Array[] 0

常见应用

1、组求和,求乘积,比较等

const  arr = [1, 2, 3, 4];
const sum = arr.reduce((x,y)=>x+y)
const mul = arr.reduce((x,y)=>x*y)
var max = arr.reduce(function (prev, cur) {
    return Math.max(prev,cur);
});
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24
console.log( max ); //max=4

2、数组去重、过滤以及实现filter、map等联合功能

let  arr = [1, 2, 3, 4, 5, 4, 3, 2, 1];
let newArr = arr.reduce(function (prev, cur) {
    cur>3 && prev.push(cur*2);
    return prev;
},[]);
console.log(newArr) // [8, 10, 8]

3、函数组合

const reverse = arr => arr.reverse()
const first = arr => arr[0]
const toUpper = s => s.toUpperCase()

// 函数组合
function compose(...funs) {
    if (funs.length === 0) {
        return arg => arg;
    }
    if (funs.length === 1) {
       return funs[0];
    }
    return funs.reduce((a, b) => (...arg) => a(b(...arg)))

}
var arr = ['one', 'two', 'three'];
// 执行组合函数
let fu=compose(toUpper, first, reverse)
console.log(fu(arr))

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

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

相关文章

盘点JAVA中延时任务的几种实现方式

场景描述 ①需要实现一个定时发布系统通告的功能&#xff0c;如何实现&#xff1f; ②支付超时&#xff0c;订单自动取消&#xff0c;如何实现&#xff1f; 实现方式 一、挂起线程 推荐指数&#xff1a;★★☆ 优点&#xff1a; JDK原生(JUC包下)支持&#xff0c;无需引入新…

RabbitMQ之集群管理

1、在node2、node3、node4三台Linux虚拟机中安装RabbitMQ。 2、从node2拷贝.erlang.cookie到node3、node4的相应目录 如果没有该文件&#xff0c;手动创建/var/lib/rabbitmq/.erlang.cookie &#xff0c;生成Cookie字符串&#xff0c;或者启动一次RabbitMQ自动生成该文件。生产…

五年Java编程生涯,大专学历最终逆袭阿里,面试+学习+经历分享

五年时间&#xff0c;对于程序员来说&#xff0c;真的非常非常宝贵&#xff0c;掉的头发都够塞满键盘的缝隙了。就说新一代偶像 TFboys 吧&#xff0c;你应该知道这个组合吧&#xff0c;黄金合作期也就三五年的时间&#xff0c;现在基本上就处于各自单飞&#xff08;solo&#…

深度学习笔记之受限玻尔兹曼机(一)玻尔兹曼分布介绍

机器学习笔记之受限玻尔兹曼机——玻尔兹曼分布介绍引言回顾&#xff1a;Hammersley-Clifford定理玻尔兹曼分布的物理意义引言 从本节开始&#xff0c;将介绍受限玻尔兹曼机。本节将从马尔可夫随机场开始&#xff0c;介绍玻尔兹曼机分布。 回顾&#xff1a;Hammersley-Cliffo…

NCP81239MNTXG 开关降压/升压控制器,USB 功率传递和 Type-C 应用

NCP81239MNTXG USB 功率传递 (PD) 控制器是一款同步降压/升压控制器&#xff0c;适用于为笔记本电脑、平板电脑、台式系统以及很多使用 USB PD 标准和 C−Type 线缆的其他消费设备提供电池电压或适配器电压到所需电源轨的转换。结合使用 USB PD 或 C−Type 接口控制器时完全符合…

【笔记】Java - VM options、Program arguments、Environment variables、eclipse variables

java使用ide开发的时候&#xff0c;运行程序&#xff08;application&#xff09;前都要设置启动配置&#xff1a; VM options、Program arguments、Environment variables 很多时候我们是默认配置启动的&#xff0c;所以没太注意。但是如果我们有特殊需求、项目上线时&#xf…

VSCode 安装教程(超详细)

文章目录VSCode 安装使用教程&#xff08;图文版&#xff09;那么&#xff0c;什么是 IDE 呢 &#xff1f;目前&#xff0c;前端开发主流的 IDE 有以下 5 个下边我们开始玩转 VSCodeVSCode 下载、安装Window 版 VScode 安装流程1、下载 Vscode 安装文件2、下载完成单击运行&…

Postman的使用——设置全局参数,参数的传递,从登录接口的响应body中提取数据更新全局参数,从响应cookie中提取数据更新全局变量

Postman的使用——设置全局参数&#xff0c;引用全局参数&#xff0c;参数的传递&#xff0c;从登录接口的响应body中提取数据更新全局参数&#xff0c;从响应cookie中提取数据更新全局变量一、设置全局参数二、引用全局参数三、从登录接口的响应body中提取数据更新全局参数四、…

cmd命令以及一些操作

文章目录前言set和echoif语句判断有无指定文件夹相对路径创建文件夹创建bat脚本换行符前言 因为下载下来的代码用bash脚本写的&#xff0c;cmd不能完美运行&#xff0c;因此想着对照着转成cmd&#xff0c;这样就方便了。 set和echo set demohello world!!! echo %demo%这就是…

[附源码]计算机毕业设计springboot学生宿舍维修管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

动态规划——数字三角形模型

数字三角形模型&#xff1a; 给定一个如下图所示的数字三角形&#xff0c;从顶部出发&#xff0c;在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点&#xff0c;一直走到底层&#xff0c;要求找出一条路径&#xff0c;使路径上的数字的和最大。 输入格式&#…

力扣 895. 最大频率栈

题目 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除并返回堆栈中出现频率最高的元素。 如果出现…

傻妞旧版本(合集)

目录一、前言二、下载三、新版傻妞订阅合集一、前言 傻妞旧版本(合集),包含amd和arm版本 二、下载 &#x1f170;️amd✅还未大改&#xff0c;init web未出 &#x1f534;[sillyGirl_amd_2022-08-05] ➡️百度网盘 ➡️天翼云盘&#xff08;访问码&#xff1a;ha8s&#xff09…

如何开通小程序?开通小程序要钱吗?

关于如何开通小程序&#xff1f;开通小程序要钱吗&#xff1f;这两个问题&#xff0c;今天给大家做一个简单的解答。 一、如何开通小程序&#xff1f; “开通小程序”这个说法其实并不准确&#xff0c;能开通的是小程序账号&#xff0c;开通完小程序账号后还需要去制作小程序&…

计算机视觉之目标检测训练数据集(皮卡丘)《2》

在做目标检测&#xff0c;训练数据集的时候&#xff0c;可以先看前段时间的一篇基础文章&#xff1a;计算机视觉之目标检测(object detection)《1》https://blog.csdn.net/weixin_41896770/article/details/128062645先熟悉一些基本知识&#xff0c;如&#xff1a;锚框&#xf…

『.NET』.Net Core在Linux中生成验证码的实现封装

&#x1f4e3;读完这篇文章里你能收获到 .Net跨平台在Linux中及Windows中都可生成验证码两套已验证过的实现方案代码封装&#xff0c;即Copy即用快速在Centos 7.x中安装Linux字体 文章目录一、安装Linux字体1. 查看字体库2. 运行安装字体库3. 安装ttmkfdir4. 查看字体库是否已…

搜索技术——模拟退火算法

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;算法及模型 物理退火过程 什么是退火&#xff1a;是指将固体加热到足够高的温度&#xff0c;使分子呈随机排列状态&#xff0c;然后逐步降温使之冷却&#xff0c;最后分子…

SPECjvm 2008 小记

背景 specjvm2008是免费的&#xff0c;直接官网下载就可以开跑了。但俗话说的好&#xff0c;便宜无好货&#xff0c;没啥厂家买账&#xff0c;看官网列出的成绩公示结果&#xff0c;根本没几家上传成绩。 另外&#xff0c;SPECjvm2008本身是测试JRE的执行成绩&#xff0c;也就…

Android databinding之RecycleView使用与介绍(二)

一 、介绍 通过上一篇databinding接入&#xff0c;我们已大概了解到databinding接入的流程和数据的简单绑定。 如果你刚看这边&#xff0c;并不了解databinding的使用&#xff0c;可以查看&#xff1a;Android databinding的接入使用与详解(一) Activity和fragment的数据绑定…

左(6)hash,大数据,位运算

前言 仅记录学习笔记&#xff0c;如有错误欢迎指正。 一、哈希函数和哈希表&#xff1a; hash()&#xff1a; (1) 输入是无限的&#xff0c;输出有限&#xff01; (2)相同的输入&#xff0c;相同的输出&#xff08;无随机因子&#xff09; (3)不同的输入&#xff0c;也可能相…