Vue快速教程:如何优雅地移除数组中的特定元素?

1、事件参与角色介绍

角色: 
1、记录数组multipleSelection,负责记录目前已勾选的记录
2、表格变量currentDeviceList,显示显示当前表格的内容

2、事件关联

由于表格是带筛选功能的,且记录带有记忆性,所以记录数组multipleSelection里,可能携带了表格变量
currentDeviceList里没有的元素,这就导致在进行全部勾选/取消时,不能对记录数组multipleSelection一刀切。

3、事件发展

在全部取消时,应该是把记录数组multipleSelection里,属于当前表格内容的部分进行剔除。

所以我进行了循环,去匹配每一个存在于记录数组multipleSelection,然后进行剔除。

   var removeArr = []this.currentDeviceList.forEach(row => {const removeIndex = this.multipleSelection.findIndex(item => item === row.deviceId)if (removeIndex !== -1) {removeArr.push(removeIndex)}})removeArr.forEach(removeItem => {this.multipleSelection.splice(removeItem, 1)})

这段代码乍一看似乎没啥问题,removeArr记录了要剔除的位置,比如[1, 3], 剔除1、3位置,但在剔除1位置后,splice会修改本身数组长度,原先的3位置的元素应该是退到2位置了,如果还剔除3位置的元素,按逻辑来说是不对的。

后续是加了降序排序,才解决了这个问题。

removeArr.sort((a, b) => b - a) 
// 进行降序排序,从后面开始移除,这样位置变化也不会影响到multipleSelection

在写本文的时候,我发现以下更简洁的写法,每次剔除前,直接获取要剔除的位置即可,虽然可能剔除位置一直不变,但是元素的变化了的,所以也不会出现剔除错误的情况。

this.currentDeviceList.forEach(row => {const removeIndex = this.multipleSelection.findIndex(item => item === row.deviceId)if (removeIndex !== -1) {this.multipleSelection.splice(removeIndex, 1)}})

但是来都来了,那就再看看别的方法吧。

二、单个去除

1、按标识方法一 filter

可以使用filter()方法来去除数组中的某个元素。filter()方法会返回一个新的数组,其中只包含满足指定条件的元素。可以通过在filter()方法的回调函数中将满足条件的元素排除掉。

let arr = [1, 2, 3, 4, 5];
let elementToRemove = 3;
let newArr = arr.filter(item => item !== elementToRemove);
console.log(newArr); // 输出 [1, 2, 4, 5]

2、按索引方法二 splice

可以使用splice()方法来去除数组中的某个元素。splice()方法会修改原有数组,在指定的位置删除指定数量的元素。

let arr = [1, 2, 3, 4, 5];
let indexToRemove = 2; // 要删除元素的索引
arr.splice(indexToRemove, 1);
console.log(arr); // 输出 [1, 2, 4, 5]

3、按索引方法三 slice

可以使用slice()方法将要删除的元素之前和之后的元素分别存储在新的数组中,从而得到去除指定元素后的数组。

let arr = [1, 2, 3, 4, 5];
let indexToRemove = 2; // 要删除元素的索引
let newArr = arr.slice(0, indexToRemove).concat(arr.slice(indexToRemove + 1));
console.log(newArr); // 输出 [1, 2, 4, 5]

三、批量去除

1、如果指定位置是有特定标识, filter

// 原始数组
var arr = [1, 2, 3, 4, 5];
// 要移除的元素列表
var removeList = [2, 4];
// 使用 filter() 函数过滤数组并返回新的数组
var newArr = arr.filter(function (item) {return !removeList.includes(item); // 判断当前元素是否在要移除的列表中
});
console.log(newArr); // 输出结果为 [1, 3, 5]

2、如果指定位置有特定标识,reduce

const arr = [1, 2, 3, 'a', 'b', 'c']; // 原始数组
const removeItems = ['a', 'b']; // 要移除的元素列表
// 使用reduce()函数进行批量删除操作
const resultArr = arr.reduce((accumulator, currentValue) => {if (!removeItems.includes(currentValue)) {accumulator.push(currentValue);}return accumulator;
}, []);
console.log(resultArr); // 输出结果为[1, 2, 3, 'c']

3、索引+降序+splice(也是本文第一节的思路)

function removeElements(arr, positions) {
// 将要移除的位置按降序排列
const sortedPositions = [...positions].sort((a, b) => b - a);for (let i = 0; i < sortedPositions.length; i++) {arr.splice(sortedPositions[i], 1);}
}
// 示例用法
const array = ['A', 'B', 'C', 'D', 'E'];
removeElements(array, [2, 4]);
console.log(array); // 输出 ["A", "B", "D"]

四、小结

方法甚多,但无外乎都是标识、索引这两块,然后配合forEach、filter、reduce、for、map等循环函数,然后再加上splice等替换函数。

学习附件:点此下载

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

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

相关文章

Outlook邮箱后缀是什么?如何改邮箱后缀?

Outlook邮箱后缀可以更改吗&#xff1f;微软有哪些后缀的邮箱&#xff1f; 对于许多刚接触Outlook邮箱的新手来说&#xff0c;了解Outlook邮箱后缀是必不可少的一步。那么&#xff0c;Outlook邮箱后缀究竟是什么呢&#xff1f;接下来&#xff0c;AokSend就来详细探讨一下这个问…

SSD203D高性能HDMI投影仪方案

一、方案描述&#xff1a; SSD203D是高度集成的高性能HDMI投影仪解决方案,主芯片为ARM Cortex A7,dule core,1.2GHz;内置DDR3,1Gb;支持H.264/H.265解码;支持JPEG基线编码;支持2D图形引擎;支持HDMI输出最高可达1920x1080/1920x120030fps ;支持SPI-Nor/Nand Flash;Built-in RTC;…

C语言之计算某日是该年的第几天

目录 一 简介 二 代码实现 三 时空复杂度 一 简介 在C语言中&#xff0c;计算某日是该年的第几天通常涉及以下步骤&#xff1a; 判断输入的年份是否为闰年。根据判断结果&#xff0c;确定当年二月的天数&#xff08;28或29天&#xff09;。然后&#xff0c;根据月份从前…

媒体邀约专访的意义?怎么做

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约专访是指企业、组织或个人主动邀请媒体进行专题访谈的一种公关活动。这种活动对于提升品牌形象、传播信息、增强公众认知度和信任度等方面都有重要作用。以下是媒体邀约专访的一…

java生成水印图片

直接上代码&#xff1a; package com.hx.manage;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;/*** 管理端API-应用启动类** author EastHill*/ public class Main {public stat…

机器学习 - PyTorch使用流程

通常的 PyTorch Workflow 是这样的. But the workflow steps can be repeated and changed depending on the problem you’re working on. Get data ready (turn into tensors)Build or pick a pretrained model to suit your problem 2.1 Pick a loss function & optimi…

第1章 初识 Python 背记手册

1、print()—输出 print()函数的基本用法如下&#xff1a; print("输出的内容")其中&#xff0c;输出内容可以是数字和字符串&#xff08;使用引号括起来&#xff09;&#xff0c;此类内容将直接输出&#xff0c;也 可 以是包含运算符的表达式&#xff0c;此类内容…

彻底学会系列:一、机器学习之梯度下降(2)

1 梯度具体是怎么下降的&#xff1f; ∂ J ( θ ) ∂ θ \frac{\partial J (\theta )}{\partial \theta} ∂θ∂J(θ)​&#xff08;损失函数&#xff1a;用来衡量模型预测值与真实值之间差异的函数&#xff09; 对损失函数求导&#xff0c;与学习率相乘&#xff0c;按梯度反方…

马斯克AI大模型Grok开源了!

2024年3月18日&#xff0c;马斯克的AI创企xAI兑现承诺&#xff0c;正式发布了此前备受期待大模型Grok-1。 代码和模型权重已上线GitHub: https://github.com/xai-org/grok-1 截止目前&#xff0c;Grok已经在GitHub上获得了35.2k颗Star&#xff0c;还在不断上升中。 Grok官方博…

yolov9目标检测可视化图形界面GUI源码

该系统是由微智启软件工作室基于yolov9pyside6开发的目标检测可视化界面系统 运行环境&#xff1a; window python3.8 安装依赖后&#xff0c;运行源码目录下的wzq.py启动 程序提供了ui源文件&#xff0c;可以拖动到Qt编辑器修改样式&#xff0c;然后通过pyside6把ui转成python…

【11】工程化

一、为什么需要模块化 当前端工程到达一定规模后,就会出现下面的问题: 全局变量污染 依赖混乱 上面的问题,共同导致了代码文件难以细分 模块化就是为了解决上面两个问题出现的 模块化出现后,我们就可以把臃肿的代码细分到各个小文件中,便于后期维护管理 前端模块化标准…

Cookie、Session、Token详解及基于JWT的Token实现的用户登陆身份认证

目录 前置知识 Cookie 什么是Cookie Cookie的作用 Cookie的声命周期 Session 什么是Session 服务集群下Session存在的问题 集群模式下Session无法共享问题的解决 Cookie和Session的对比 Token 什么是Token 为什么产生Token 基于JWT的Token认证机制 Token的优势 …

第112讲:Mycat实践指南:字符串Hash算法分片下的水平分表详解

文章目录 1.字符串Hash算法分片的概念1.1.字符串Hash算法的概念1.2.字符串Hash算法是如何将数据路由到分片节点的 2.使用字符串Hash算法分片对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现字符串Hash算法分片的水平分表2.2.1.配置Schema配置文件2.2.2…

Redis Pub/Sub: 实时消息传递的完美解决方案

Redis发布订阅&#xff08;Pub/Sub&#xff09;是一种消息传递模式&#xff0c;允许消息的发送者&#xff08;发布者&#xff09;将消息发送给多个接收者&#xff08;订阅者&#xff09;。在Redis中&#xff0c;发布者和订阅者之间通过频道&#xff08;Channel&#xff09;进行…

算法刷题day33

目录 引言一、动态网格二、画图三、扫雷 引言 这几天一直再写关于搜索的问题&#xff0c;我发现搜索不仅仅局限于网格中的那种搜索&#xff0c;还有状态的变换&#xff0c;也可以抽象成一个点&#xff0c;去找最小变换次数&#xff0c;这也是一种搜索&#xff0c;所以说还是得…

SpringData JPA 快速入门案例详解

SpringData JPA JPA 简介&#xff1a; JPA&#xff08;Java Persistence API&#xff09;是 Java 持久层规范&#xff0c;定义了一些列 ORM 接口&#xff0c;它本身是不能直接使用的&#xff0c;因为接口需要实现才能使用&#xff0c;Hibernate 框架就是实现 JPA 规范的框架。…

colab中数据集保存到drive与取出的方法

from google.colab import drive drive.mount(/content/drive) 一、下载数据集 from datasets import load_dataset max_length 32 # Maximum length of the captions in tokens coco_dataset_ratio 50 # 50% of the COCO2014 dataset# Load the COCO2014 dataset for tr…

浅谈MVVM、MVC、MVP的区别

MVC、MVP 和 MVVM 是三种常见的软件架构设计模式&#xff0c;主要通过分离关注点的方式来组织代码结构&#xff0c;优化开发效率。 在开发单页面应用时&#xff0c;往往一个路由页面对应了一个脚本文件&#xff0c;所有的页面逻辑都在一个脚本文件里。页面的渲染、数据的获取&…

计算机毕业设计-基于python的旅游信息爬取以及数据分析

概要 随着计算机网络技术的发展&#xff0c;近年来&#xff0c;新的编程语言层出不穷&#xff0c;python语言就是近些年来最为火爆的一门语言&#xff0c;python语言&#xff0c;相对于其他高级语言而言&#xff0c;python有着更加便捷实用的模块以及库&#xff0c;具有语法简单…

使用原生nodejs搭建一个简易的web服务器demo

简易demo var http require(http); var url require("url"); const app http.createServer(function (request, response) {var urlObj url.parse(request.url,true);console.log(request.url);// 内容类型: text/plain。并用charsetUTF-8解决输出中文乱码respon…