数组常用方法总结 (7) :copyWithin / fill / reduce / reduceRight

news2024/10/7 18:23:31

copyWithin

  • 将指定位置的元素复制到数组的其他位置。
  • 返回值为移动后数组。
  • 原始数组的内容会被改变,原始数组的长度不会改变。
  • arr.copyWithin(index, startIndex, endIndex)
  • 第一个参数为,期望被复制的内容将要插入的位置。
  • 第二个参数为,数组中复制的内容起始的位置。
  • 第三个参数为,数组中复制的内容截至的位置。
// 简单数组
let arr = [12, 18, 53, 100];
// 复杂数组
let arr2 = [
    { num: "0", value: "12" },
    { num: "1", value: "18" },
    { num: "2", value: "53" },
    { num: "3", value: "100" },
];
let result1 = arr.copyWithin(2, 0); 
// 复制出的内容:从 0 开始复制,一直复制到数组末尾.
// 将复制出的内容,插入到数组索引为 2 的位置。
// 应用本例解释为:复制出的内容为 12 18 53 100,将此内容插入到原本 53 的位置。
// 并覆盖掉原始的内容(复制内容的长度为 2,则覆盖的长度为 2),得到 12 18 12 18

let result2 = arr2.copyWithin(1, 0, 1); 
// 复制出的内容:从 0 开始复制,复制到 1.
// 将复制出的内容,插入到数组索引为 1 的位置。
// 应用本例解释为:复制出的内容为 { num: "0", value: "12" },将此内容插入到原本 { num: "1", value: "18" } 的位置。
// 并覆盖掉原始的内容(复制内容的长度为 1,则覆盖的长度为 1),得到如图结果

console.log('result1',result1,arr);
console.log('result2',result2,arr2);

copyWithin

fill

  • 将传入的参数填充到数组的指定位置。
  • 返回值为移动后数组。
  • 原始数组的内容会被改变。
  • arr.fill(value, startIndex, endIndex)
  • 第一个参数为,希望被填充的内容。
  • 第二个参数为,填充内容覆盖的起始位置。
  • 第三个参数为,填充内容覆盖的截至位置。
// 简单数组
let arr = [12, 18, 53, 100];
// 复杂数组
let arr2 = [
    { num: "0", value: "12" },
    { num: "1", value: "18" },
    { num: "2", value: "53" },
    { num: "3", value: "100" },
];
let result3 = arr.fill("11", 0, 2); 
// 填充内容为字符串 '11'
// 数组中索引为 0 的位置到索引为 2 的位置,填充为 '11' 

let result4 = arr2.fill({ num: "4", value: "256" }, 0, 2);
// 填充内容为对象 { num: "4", value: "256" }
// 数组中索引为 0 的位置到索引为 2 的位置,填充为 { num: "4", value: "256" } 

console.log('result3',result3,arr);
console.log('result4',result4,arr2);

fill

reduce

  • 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

  • 不会对原始数组进行更改。

  • arr.reduce((prev,cur,index,arr)=>{},init)

  • prev:上一次回调函数的返回值,默认为 init

  • cur:当前回调函数内,正在处理的数组元素

  • index:当前回调函数内,正在处理的数组元素的索引值

  • arr:原始数组

  • init:初始值

  • 普通示例 - 观察参数值

let reduceArr = [1, 2, 3, 4];
let result5 = reduceArr.reduce((prev, cur, index, arr) => {
    console.log(
        "prev:" + prev + ",cur:" + cur + ",index:" + index + ",arr:" + arr
    );
    return cur;
}, 0);
console.log('result5',result5,reduceArr); // 4

reduce-普通示例

  • 常用方法 - 累加器
let reduceArr = [1, 2, 3, 4];
let result6 = reduceArr.reduce((prev, cur, index, arr) => {
    console.log(
        "prev:" + prev + ",cur:" + cur + ",index:" + index + ",arr:" + arr
    );
    // 返回值为上一次返回的内容加当前值
    return prev + cur;
}, 0);
console.log('result6',result6); // 10
// 第一次:
// prev:0,cur:1,返回结果 prev + cur 为 1
// 第二次:
// prev:1,cur:2,返回结果 prev + cur 为 3
// 第三次:
// prev:3,cur:3,返回结果 prev + cur 为 6
// 第四次:
// prev:6,cur:4,返回结果 prev + cur 为 10

reduce-累加器

  • 常用方法 - 计算元素出现次数
let reduceArr = ['qqq', 'www', 'qqq', 'eee'];
let result7 = reduceArr.reduce((prev, cur, index, arr) => {
    console.log(
        "prev:" + prev + ",cur:" + cur + ",index:" + index + ",arr:" + arr
    );
    if (cur in prev) {
    	// 如果当前值已经在返回结果的对象中了,则对结果加1
        prev[cur]++;
    } else {
    	// 如果当前值没有在返回结果中,则为返回结果新增一个属性
        prev[cur] = 1;
    }
    return prev;
    // 初始值为空对象
}, {});
console.log('result7',result7,reduceArr);
// 第一次:
// prev:{},cur:'qqq',属性 'qqq' 不在 prev 中,则进入判断 else,返回结果 prev 为 { 'qqq': 1 }
// 第二次:
// prev:{ 'qqq': 1 },cur:'www',属性 'www' 不在 prev 中,则进入判断 else,返回结果 prev 为 { 'qqq': 1, 'www': 1 }
// 第三次:
// prev:{ 'qqq': 1, 'www': 1 },cur:'qqq',属性 'qqq' 在 prev 中,则进入判断 if,返回结果 prev 为 { 'qqq': 2, 'www': 1 }
// 第四次:
// prev:{ 'qqq': 2, 'www': 1 },cur:'eee',属性 'eee' 不在 prev 中,则进入判断 else,返回结果 prev 为 { 'qqq': 2, 'www': 1, 'eee': 1 }

reduce-计算

reduceRight

  • 方法接收一个函数作为累加器,数组中的每个值(与 reduce 不同,顺序是从右到左)开始缩减,最终计算为一个值。
  • 不会对原始数组进行更改。
  • arr.reduce((prev,cur,index,arr)=>{},init)
  • prev:上一次回调函数的返回值,默认为 init
  • cur:当前回调函数内,正在处理的数组元素
  • index:当前回调函数内,正在处理的数组元素的索引值
  • arr:原始数组
  • init:初始值
  • 普通示例 - 观察参数值
let reduceArr = [1, 2, 3, 4];
let result8 = reduceArr.reduceRight((prev, cur, index, arr) => {
    console.log(
        "prev:" + prev + ",cur:" + cur + ",index:" + index + ",arr:" + arr
    );
    return cur;
}, 0);
console.log('result8',result8,reduceArr); // 1

reduceRight

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

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

相关文章

SpringBoot 参数接收只看这一篇文章就够了

好久没有写过接口了,最近在写一些基础接口,在写参数接口接收参数的时候居然想不起来,会有那么一丝丝的怀疑,虽然并不会影响编码,但是说明一个问题,没有系统的总结知识,没有温故知新,…

PMP真的有用吗?

作为一个考了PMP的前辈来说,是有用的。PMP 含金量,PMP有没有用,这类问题一直是大家关注的重点,知乎上几个相关问题热度也一直很高。友情提示一句:PMP 就是一个证书,能起到加分和门槛的作用,技术…

Diazo Biotin-PEG3-DBCO,二苯并环辛炔PEG3重氮生物素,无铜 Click Chemistry

Diazo Biotin-PEG3-DBCO反应原理:Diazo Biotin-PEG3-DBCO 是一种点击化学标记生物素,可通过无铜 Click Chemistry 与叠氮化物发生反应。重氮允许使用连二亚硫酸钠 (Na2S2O4) 从链霉亲和素中有效释放捕获的生物素化分子。点击化学生物素标记试剂包含各种点…

基于麻雀算法优化的深度极限学习机DLM的预测算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于SpringBoot的SSMP整合(业务层表现层)

基于SpringBoot的SSMP整合(数据层)https://blog.csdn.net/weixin_51882166/article/details/128693739?spm1001.2014.3001.5502 标准CRUD Service层接口定义与数据层接口定义具有较大差距。 定义Service接口: package com.example.ssmp_…

蓝桥杯STM32G431RBT6学习——LCD

蓝桥杯STM32G431RBT6学习——LCD 前言 作为在开发板上最显眼的LCD屏幕,自然而然也是每年的必考考点。国信长天开发板使用的是一块2.4寸(240*320)的TFT-LCD液晶屏,其引脚占用如下: 其中,CS为片选信号引脚…

【Netty】实现IM聊天室案例Demo

文章目录1、WebSocket链接建立2、实现用户上线功能3、私聊发送消息注意: 该文章不会详细介绍Netty相关概念和原理,主要目的是介绍如何快速构建聊天室Demo 不会在文章主体过多说明代码流程,文章中的代码已经配备了详细的注释 1、WebSocket链接…

网站建设 之 用js写wasm

为什么要这么做?编译js比解释js更快是必然的wasm是什么?我期望是一个二进制文件WebAssembly(又名wasm)是一种高效的,低级别的编程语言。 它让我们能够使用JavaScript以外的语言(例如C,C &#x…

【Linux】进度条小程序

目录一.\r && \n二.行缓存区概念问题:解答:检测:三.进度条1.进度动态条2.进度百分比3.小装饰4.颜色该篇博客会主要按步骤推导出一个在Linux上运行的进度条小程序,会用到vim编辑器和gcc编译器,如果对这两个软件…

Centos7安装、卸载nginx及配置,配置成系统服务(一步到位)

目录 前言 一、下载安装解压 1.进入临时文件夹里(随便一个都行) 2.下载并安装nginx压缩包 3.解压该压缩包 4.创建目标文件夹 5.(默认会安装在/usr/local/nginx)这里通过configure命令指定安装目录 6.编译安装 7.最后生成的…

一、初始Numpy

1、numpy简介 简介 Numpy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 Numpy的前身Numeric最早是有Jim Hugunin与其他协作者共同开发,20…

十五天学会Autodesk Inventor,看完这一系列就够了(九),主题/色彩/单位设置

众所周知,Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad,所以再学习Inventor&…

使用SpringBoot创建web项目,并使用外部Tomcat

使用SpringBoot创建web项目,并使用外部Tomcat 目录使用SpringBoot创建web项目,并使用外部Tomcat简单介绍:特点:步骤简介下面就使用SpringBoot创建一个web工程,并且使用外部的Tomcat和实现对jsp的支持:一、创…

AIDL 应用间简单通信demo及基本问题

AIDL:Android Interface Definition Language,即Android接口定义语言。 他的作用大家已经知道了,有些童鞋对于其中的使用细节可能会有一些理解误差,并且会造成一写异常或者通讯失败。 我们先看几个关键点再看代码,如果项目不符合这几点&…

ffmpeg编译android平台-(ubuntu+ndkr16b+ffmpeg3.4.12)

一、环境配置 1、下载NDK,NDK老版本 1.1、 ubuntu下载 wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip1.2、解压NDK unzip android-ndk-r16b-linux-x86_64.zip1.3、配置NDK环境变量 vim /etc/profile1.4、 在profile文件中添加如下内容…

String.prototype.matchAll called with a non-global RegExp argument

如上 matchAll这个API 与 正则的全局匹配是不一样的。他会将匹配到的所有字符串以迭代器的形式返回出来。 我们可以使用Array.from或者数据解构来获得匹配到的数组。 他与正则全局匹配的区别是当正则表达式包含()捕获组的时候,全局匹配无法获得子匹配组的数据。 …

【Datewhale一起吃瓜 Task1】周志华西瓜书第一章+第二章

这里写目录标题机器学习是干什么的机器学习的理论基础: PAC模型基本术语关于数据关于假设关于模型训练机器学习任务分类归纳偏好模型的评估和选择训练流程划分数据集的方法留出法交叉验证自助法性能度量机器学习是干什么的 我们目前处于大数据时代,每天会产生数以亿…

一个监控系统的典型架构是什么样的

典型架构 采集器是负责采集监控数据的,采集到数据之后传输给服务端,通常是直接写入时序库。然后就是对时序库的数据进行分析和可视化,分析部分最典型的就是告警规则判断(复杂一些的会引入统计算法和机器学习的能力做预判),即图上的告警引擎,告警引擎产生告警事件之后交给…

华为MPLS跨域带RR实验配置

目录 Option B方案实验配置 配置建立Vpnv4邻居 配置反射器 配置RR和ASBR取消RT值检测 配置ASBR相连接口开启MPLS 配置ASBR向RR发送路由时更改下一跳 Option C1方案实验配置 Option C2方案实验配置 接口IP地址、底层IGP路由协议(ISIS)、MPLS LDP协…

一种环状二肽3705-26-8,cyclo(Pro-Phe),环(PHE-PRO)环状二肽

基础产品数据(Basic Product Data):CAS号:3705-26-8中文名:环(PHE-PRO)英文名:cyclo(Pro-Phe),CYCLO(-PHE-PRO)结构式(Structural):详细产品数据(…