当前位置: 首页 > news >正文

依据小兔鲜项目,总结Javascript数组常用方法

find

在向购物车添加某种规格的商品时,查找购物车列表中是否已经存在该规格的商品

find()方法传入一个回调函数,代表对数组每一项item的校验要求

返回数组中第一个符合条件的元素的值,如果没有则返回undefined

        const item = cartList.value.find((item) => goods.skuId === item.skuId);if (item) {// 找到了,该规格商品的数量+1item.count++;} else {// 没找到,数组加入该商品cartList.value.push(goods);}

reduce

用于计算购物车中商品的数量总数/ 用于计算购物车中的总金额

reduce()方法传入的参数为两个,一个是用于累计的回调函数(它将为数组中每一个元素依次执行回调函数),另一个是初始值

返回累计值,即回调函数中的第一个参数(最后计算得到的结果)

    // 计算属性// 1. 总的数量 所有项的count之和const allCount = computed(() =>cartList.value.reduce((a, c) => a + c.count, 0));// 0是初始值,a是累加项,c是每一项// 2. 总价 所有项的count*price之和const allPrice = computed(() =>cartList.value.reduce((a, c) => a + c.count * c.price, 0));

filter

用于计算购物车中被选中的商品的数量总数/用于计算购物车中被选中的商品总金额

filter()方法传入一个回调函数,代表对数组每一项item的校验要求

返回一个新数组,包含所有符合要求的元素

    // 3.已选择数量const selectedCount = computed(() =>cartList.value.filter((item) => item.selected).reduce((a, c) => a + c.count, 0));// 4. 已选择商品价钱合计const selectedPrice = computed(() =>cartList.value.filter((item) => item.selected).reduce((a, c) => a + c.count * c.price, 0));

forEach

用于在购物车点击“全选”单选框,购物车中的每一个商品都是选中/没有选中的状态

forEach()方法传入一个回调函数,代表对数组每一项item的操作

返回undefined(不返回新数组)

    // 全选功能const allCheck = (selected) => {cartList.value.forEach((item) => (item.selected = selected));};

every

用于计算,当购物车中的每一个商品都被选中时,“全选”单选框应处于选中状态

                  当存在购物车中的商品没有被选中时,“全选”单选框应处于没有被选中的状态

every()方法用于检测数组中所有元素都符合指定条件

          传入一个回调函数,代表对数组中每一项item的校验要求(回调函数返回true或false)

          返回一个布尔值,如果数组中所有元素都通过校验则返回true,否则返回false

    // 是否全选const isAll = computed(() => cartList.value.every((item) => item.selected));

findIndex

用于寻找,将要被删除的某种规格的商品所处数组中的下标值,

并通过splice方法删除处于该下标的商品

findIndex()方法传入一个回调函数,代表对数组每一项item的校验要求

返回数组中第一个符合条件的元素的下标位置,如果没有符合条件的则返回-1

    // 删除购物车中的商品const delCart = async (skuId) => {if (isLogin.value) {// 调用接口实现接口购物车中的删除功能await delCartAPI([skuId]);updateNewList()} else {// 思路:// 1. 找到要删除项的下标值(通过下标值删除该项) -splice// 2. 使用数组的过滤方法 -filterconst idx = cartList.value.findIndex((item) => skuId === item.skuId);cartList.value.splice(idx, 1);}};

splice

小兔鲜项目中的例子同上

splice()方法用于在数组中删除、替换和插入元素(参考博客:js中的splice的三种用法(删除,替换,插入)_js splice替换-CSDN博客)

array.splice(index,howmany,item1,.....,itemX)

        传入第一个参数index为将要被删除的起始元素的下标值,

         传入第二个元素为从index下标值开始,要删除的元素数量

          传入的第三个(item1)及以后的参数表示为,从该位置删除后,插入的元素列表

返回被删除的元素组成的数组,如果要获取被删除元素后的数组,直接调用原来的数组即可

(参考博客:关于js中splice方法返回的结果_splice的返回值-CSDN博客)

push

用于向购物车末尾添加商品

push()方法用于向数组末尾添加一个或多个元素

         可以传入多个参数,为向数组末尾添加的元素列表

        (参考博客:JavaScript push() 方法添加元素)

        返回数组的新长度

    const addCart = async (goods) => {const { skuId, count } = goods;if (isLogin.value) {// 登录之后的加入购物车逻辑await insertCartAPI({ skuId, count });updateNewList()} else {// 添加购物车操作// 已添加过 -count + 1// 没有添加过 -直接push// 思路: 通过匹配传递过来的商品对象中的skuId能不能在cartList中找到,找到了就是添加过const item = cartList.value.find((item) => goods.skuId === item.skuId);if (item) {// 找到了item.count++;} else {// 没找到cartList.value.push(goods);}}};

map

用于在向后端合并购物车接口传递参数时,重组数组每一项的形式

map()方法用于对数组中每一个元素,依次按照函数处理

        传入一个回调函数,代表对数组每一项item的操作

        返回一个新数组,新数组中的每个元素为原数组中的每个元素依次调用函数处理后的值

    // 2. 定义获取接口数据的action函数const getUserInfo = async ({ account, password }) => {const res = await loginAPI({ account, password });userInfo.value = res.result;// 合并购物车的操作await mergeCartAPI(cartStore.cartList.map(item => {return {skuId: item.skuId,selected: item.selected,count: item.count}}))cartStore.updateNewList()};

延伸

数组初始化

  1. 指定长度的初始化
    var vArray = new Array(8);
  2. 不指定长度的初始化
    var vArray = new Array();
    vArray .push(1);var vArray = [];
    vArray .push(1);

    3.直接对数组进行赋值

    var vArray = ['1','2','3'];

slice

slice()方法用于截取数组的一部分

array.slice(startend)

        传入的第一个参数start代表从哪个下标位置开始选取数组元素(可为负数,表示倒数第几个)

        传入的第二个参数end代表在哪个下标位置结束(可为负数,表示倒数第几个)

返回一个新的数组,即截取后的数组

var arr = [1,2,3,4,5];
console.log(arr.slice(1,5)) //[2, 3, 4, 5]
var arr = [1,2,3,4,5];
console.log(arr.slice(-3)) //[3, 4, 5]

pop

pop()方法用于删除数组最后一个元素

不需要传递参数

返回被删除的元素

var arr = [1,2,3];
console.log(arr.pop()) //3
console.log(arr)  //1 2

shift

shift()方法用于删除数组首部的元素

不需要传递参数

返回被删除的元素

var arr = [1,2,3];
console.log(arr.shift()) //1
console.log(arr)  //2 3

unshift

push()方法用于向数组开头添加一个或多个元素

array.unshift(item1,item2, ..., itemX)

         可以传入多个参数,为向数组开头添加的元素列表

        返回数组的新长度

var len = arr.unshift(0);
console.log(arr); // [0, 1, 2, 3]
console.log(len); // 4
len = arr.unshift(-2,-1);
console.log(arr);  // [-2, -1, 0, 1, 2, 3]
console.log(len);  // 6

indexof

indexof()方法用于查找数组中某个元素首次出现的位置

array.indexOf(item,start)

        传入的第一个参数item代表要查找的元素

        第二个参数可不传,代表从哪个下标位置开始查找元素

若找到,返回查找到的元素的位置;如果没有找到,返回-1

var arr = [1,2,3,5,6,7];
console.log(arr.indexOf(6)) //4 返回索引位置。
console.log(arr.indexOf(8)) //如果是数组中没有的元素,返回-1

concat

用于连接两个或多个数组

array1.concat(array2, array3,..., arrayX)

传入的参数为一个或多个数组

返回一个新数组,即为连接后的数组

(参考:JavaScript concat() 方法 | 菜鸟教程)

const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);console.log(array3);  // 输出:['a', 'b', 'c', 'd', 'e', 'f']
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = ['g', 'h', 'i'];
const array4 = array1.concat(array2, array3);console.log(array4);  // 输出:['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

join

用于把数组中的所有元素连接为一个字符串

array.join(separator)

传入的参数为,可以指定的分隔符;可以省略该参数,如果省略的话,默认用逗号进行连接

返回连接而成的字符串

(参考:JavaScript join() 方法 | 菜鸟教程)

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join();//Banana,Orange,Apple,Mango
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(" and ");//Banana and Orange and Apple and Mango

相关文章:

依据小兔鲜项目,总结Javascript数组常用方法

find 在向购物车添加某种规格的商品时,查找购物车列表中是否已经存在该规格的商品 find()方法传入一个回调函数,代表对数组每一项item的校验要求 返回数组中第一个符合条件的元素的值,如果没有则返回undefined const item cartList.value…...

制作飞腾(arm)芯片架构的nexus镜像

nexus官方没有arm架构的镜像,下面介绍一种自己制作镜像的方式 1、事先准备 在一个arm架构机器上安装docker下载nexus的linux版(https://www.sonatype.com/download-oss-sonatype)下载centos的arm架构镜像(docker pull centos-centos8.4.2105)下载arm版本的java8(ht…...

Git 标签管理

前言 标签 tag,就相当于对 某一次的 commit 做一个标识,起了一个别名,例如:在某个项目发布版本的时候,可针对最后一次 commit 起一个别名 v1.0 来标识这一次的commit。tag 的作用:commit id 相对于 tag 是很…...

多级缓存自用

1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,添加缓…...

1.1卷积的作用

上图解释了1∗1卷积如何适用于尺寸为H∗W∗D的输入层,滤波器大小为1∗1∗D,输出通道的尺寸为H∗W∗1。如果应用n个这样的滤波器,然后组合在一起,得到的输出层大小为H∗W∗n。 1.1∗1卷积的作用 调节通道数 由于 11 卷积并不会改…...

Unity 简单打包脚本

打包脚本 这个打包脚本适用于做demo,脚本放在Editor目录下 using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class BuildAB {[MenuItem("Tools/递归遍历文件夹下…...

基于社区电商的Redis缓存架构-缓存数据库双写、高并发场景下优化

基于社区电商的Redis缓存架构 首先来讲一下 Feed 流的含义: Feed 流指的是当我们进入 APP 之后,APP 要做一个 Feed 行为,即主动的在 APP 内提供各种各样的内容给我们 在电商 APP 首页,不停在首页向下拉,那么每次拉的…...

Python提取PDF表格(基于AUTOSAR_SWS_CANDriver.pdf)

个人学习笔记,仅供参考。 需求:提取AUTOSAR SWS中所有的API接口信息,用于生成C代码。 此处以AUTOSAR_SWS_CANDriver.pdf为例,若需要提取多个SWS文件,遍历各个文件即可。 1.Python包 pdfplumber是一款完全用python开…...

UVa1583生成元(Digit Generator)

题目 如果x加上x的各个数字之和得到y&#xff0c;也就是说x是y的生成元。给出n(1<n<100000)&#xff0c;求最小生成元。无解则输出0。 输入输出样例 输入 3 216 121 2005输出 198 0 1979思路 要想解决这个题目&#xff0c;只需要对每一个输入的值从1开始遍历找到小于…...

【Springboot+vue】如何运行springboot+vue项目

从github 或者 gitee 下载源码后&#xff0c;解压&#xff0c;再从idea打开项目 后端代码处理 这是我在gitee下载下来的源码 打开之后&#xff0c;先处理后端代码 该配置的配置&#xff0c;该部署的部署 比如将sql文件导入数据库 然后去配置文件更改配置 然后启动项目 确保…...

拥抱变化,良心AI工具推荐

文章目录 &#x1f4a5; 简介&#x1f344; 工具介绍&#x1f353; 功能特点&#x1f957; 使用场景&#x1f389; 用户体验&#x1f9e9; 下载地址&#x1f36d; 总结 &#x1f4a5; 简介 我是一名资深程序员&#xff0c;但薪资缺对不起资深两个字&#xff0c;为了生存&#x…...

Tensorflow的日志log记录

if OUTPUT_GRAPH:tf.summary.FileWriter("logs/", sess.graph)自动创建文件夹log...

C-语言每日刷题

目录 [蓝桥杯 2015 省 A] 饮料换购 题目描述 输入格式 输出格式 输入输出样例 # [蓝桥杯 2023 省 A] 平方差 题目描述 输入格式 输出格式 输入输出样例 说明/提示 【样例说明】 [NOIP2001 普及组] 数的计算 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据…...

十五届海峡两岸电视主持新秀大会竞赛流程

海峡两岸电视主持新秀会是两岸电视媒体共同举办的一项活动&#xff0c;旨在为两岸年轻的电视主持人提供一个展示才华的舞台&#xff0c;促进两岸文化交流和青年交流。本届新秀会是第十二届海峡两岸电视艺术节的重要活动之一。本次竞赛赛制流程如下&#xff1a; &#xff08;1&…...

安全行业招聘信息汇总

1. 阿里巴巴-淘天集团-安全部 社招岗位&#xff1a;Java开发 招聘层级&#xff1a;P5-P6 工作年限&#xff1a;本科毕业1-3年&#xff0c;硕士毕业1-2年 base地点&#xff1a;杭州 职位描述 负责淘天安全部风控基础标签平台0到1能力建设及产品规划和落地。负责标签应用的产品…...

【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver

之前讲到基于python的自动化测试环境&#xff0c;需要安装Python,再安装Selenium。具体可看【如何学习Python自动化测试】—— 自动化测试环境搭建 但是&#xff0c;想要使用Selenium发送指令模拟人类行为操作浏览器&#xff0c;就需要安装浏览器驱动。不同的浏览器需要安…...

Spring Data Redis切换底层Jedis 和 Lettuce实现

1 简介 Spring Data Redis是 Spring Data 系列的一部分&#xff0c;它提供了Spring应用程序对Redis的轻松配置和使用。它不仅提供了对Redis操作的高级抽象&#xff0c;还支持Jedis和Lettuce两种连接方式。 可通过简单的配置就能连接Redis&#xff0c;并且可以切换Jedis和Lett…...

wireshark自定义协议插件开发

目录 脚本代码 报文显示 脚本代码 local NAME "test" test_proto Proto("test", "test Protocol") task_id ProtoField.uint16("test.task_id", "test id", base.DEC) cn ProtoField.uint8("test.cn", &qu…...

一文读懂MongoDB的全部知识点(1),惊呆面试官。

文章目录 01、mongodb是什么&#xff1f;02、mongodb有哪些特点&#xff1f;03、你说的NoSQL数据库是什么意思&#xff1f;NoSQL与RDBMS直接有什么区别&#xff1f;为什么要使用和不使用NoSQL数据库&#xff1f;说一说NoSQL数据库的几个优点?04、NoSQL数据库有哪些类型?05、M…...

仅仅通过提示词,GPT-4可以被引导成为多个领域的特定专家

The Power of Prompting&#xff1a;提示的力量&#xff0c;仅通过提示&#xff0c;GPT-4可以被引导成为多个领域的特定专家。微软研究院发布了一项研究&#xff0c;展示了在仅使用提策略的情况下让GPT 4在医学基准测试中表现得像一个专家。研究显示&#xff0c;GPT-4在相同的基…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...