Vue批量删除选中的选项解决方法

这篇博客探讨了在JavaScript中使用splice方法删除数组元素时遇到的问题,即删除过程中数组键值的变化。作者建议在批量删除时采用倒序遍历的方式,先删除索引大的元素,以避免影响后续元素的索引。文章通过一个名为`deleteData`的函数展示了这一解决方案,该函数首先对要删除的元素进行排序,然后倒序遍历并使用splice删除。此外,还提供了一个冒泡排序函数`maopaoSort`来确保元素顺序的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用splice直接删除了数组 改变了数组的键值。

所以JS中删除批量删除数组元素时应该倒序删除(意思是先删除索引大的元素,再删除索引小的元素)

因为在删除的过程中数组的索引会变化,如果先删除了小的元素,后面元素的索引都会变化.

deleteData() {
	if(this.selectedIndexs.length == 0){
		this.modalContent = "请选择一条数据";
		this.isShowModal=true;
		return;
	}
	this.maopaoSort(this.selectedIndexs);  //先排序防止顺序不一致
	this.selectedIndexs.reverse();  //倒序解决splice删除数组后改变键值
	this.selectedIndexs.forEach(selectItem => {
		if(this.tableData[selectItem].id != undefined && this.tableData[selectItem].id != null){
			this.delTableData.push(this.tableData[selectItem]);
		}
		this.tableData.splice(selectItem,1);
	})
	this.selectedIndexs.length = 0;
	this.$refs.table.clearSelection();
},
//冒泡排序
maopaoSort(arr){
    for(let i=0;i<arr.length-1;i++){
        for(let j=i;j<arr.length;j++){
            if(arr[i]>arr[j]){
                let changeData = arr[i];
                arr[i] = arr[j];
                arr[j] = changeData;
            }
        }
    }
    return arr;
},
### 批量删除功能的实现 在 Vue 2 中通过 `el-table` 和 `ElementUI` 可以轻松实现表格的批量删除功能。以下是具体实现方法: #### 数据声明 为了支持批量操作,需要在组件的数据部分定义一些变量来存储选中的行 ID 或其他唯一标识符。 ```javascript data() { return { allTableData: [], // 后台返回的表格数据 batchDeletionIds: [], // 存储被选中行的ID selectionList: [] // 当前选中的行对象列表 }; } ``` 上述代码片段展示了如何初始化必要的数据结构[^2]。 --- #### 表格配置 使用 `el-table` 的多选功能可以通过设置属性 `@selection-change` 来监听用户的选中变化事件,并更新 `batchDeletionIds` 列表。 ```html <el-table :data="allTableData" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"></el-table-column> <!-- 其他列 --> </el-table> ``` 当用户选择某一行或多行时,触发 `handleSelectionChange` 方法并记录这些行的信息。 --- #### 处理选中事件 编写 `handleSelectionChange` 函数,该函数会在用户改变选中项时自动调用。 ```javascript methods: { handleSelectionChange(selection) { this.selectionList = selection; this.batchDeletionIds = selection.map(item => item.id); // 提取每行的 id 属性 } } ``` 此逻辑会将用户选中的每一行映射为其唯一的 `id` 并存入数组 `batchDeletionIds` 中[^1]。 --- #### 定义批量删除方法 创建一个名为 `handlerDelete` 的方法,在其中执行实际的删除动作。 ```javascript methods: { handlerDelete() { if (this.selectionList.length === 0) { this.$message.warning('请选择要删除的内容'); return; } const sids = this.batchDeletionIds.join(","); const params = { 'sids': sids }; this.$confirm('确认删除选项吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { batchDelete(params).then(response => { this.$message.success('批量删除成功'); this.query(); // 调用查询刷新表格数据 }).catch(error => { console.error(error); this.$message.error('删除失败,请稍后再试'); }); }).catch(() => {}); } } ``` 这段代码实现了以下功能: - 如果未选择任何项目,则弹窗提醒。 - 将选定项目的 `id` 进行拼接形成参数提交至服务器接口。 - 使用 `Promise` 链式调用来处理异步请求的结果。 --- #### 删除按钮绑定 最后一步是在模板中添加一个按钮用于触发展示警告框和发起删除请求的操作。 ```html <el-button type="danger" @click="handlerDelete">批量删除</el-button> ``` 点击这个按钮即可启动整个流程。 --- ### 总结 以上步骤涵盖了从界面设计到后端交互的所有环节,能够帮助开发者快速搭建起基于 Vue.js 和 Element UI 的高效批量删除机制[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值