Element多选框组el-checkbox-group,重新勾选时数组顺序被打乱?

前言

        最近使用element的el-checkbox-group组件,发现多选点击之后,最后得到的数据是乱的。顺序点击没问题,如果不按顺序点击,后台得到的数据是乱序的。但我们的一些处理逻辑往往需要顺序处理,不然后台代码不好处理。

问题        

        比如我的表单是这样的,我可能会选择三个中的某一个,又或者先点第三个再点第一个,这样后台得到的数据顺序是“证件报告,设备报告”,但是其实我想要的是“设备报告,证件报告”。

0b5131768afa5d6c0993e29f3bfd5db3.png

        因为el-checkbox-group选择的顺序是按照点击的多选框的顺序,而不是按照多选框的排列顺序,但是我们不希望它的顺序被打乱,于是我们可以这样处理:

        组件部分代码

<el-form-item label="报告类型" prop="DocumentTypes">
    <el-checkbox-group v-model="form.DocumentTypes">
    	<el-checkbox-button  v-for="(v1,index) in typeList" :label="v1.Title" :key="v1.Title">{{v1.Title}}</el-checkbox-button>
    </el-checkbox-group>
	<span style="color:orange">仅支持单选或者全选</span>
</el-form-item>

        后台返回的数据格式

a001beabf438af57c55ca0e91e18cd75.png

解决方案        

        因为我的数组是没法排序的汉字,就只能用checkbox的数组进行filter,去过滤是否在已选的数组中;

//数组组装
let list = []
for(var i=0;i<this.typeList.length;i++){
	list.push(this.typeList[i]['Title'])
}
let checkboxList = list//是原本的数组
let checkList    = this.form.DocumentTypes//是选中的数组
let sortArray    = list.filter(item => checkList.includes(item))//排序后的数组
console.log(checkboxList)
console.log(checkList)
console.log(sortArray)

1、顺序点击        

        按顺序点击的时候,得到的结果如下:

a4dd6d9d626b5b3fdd5929e2b61dc919.png

2、乱序点击        

        当我们不按顺序点击的时候,得到的结果:

3b8431380dd07080559edb8d3aff071c.png

        此次,就验证了我们前面说到的问题,解决了排序的问题;

其他        

        如果没有汉字之类特殊的字符,比如字母、数字,可以直接进行重新排序:

//数组组装
let list = []
for(var i=0;i<this.typeList.length;i++){
	list.push(this.typeList[i]['Title'])
}
let checkboxList = list//是原本的数组
let checkList    = this.form.DocumentTypes//是选中的数组
let sortArray    = checkList.sort((a, b) => {
	return checkboxList.indexOf(a) - checkboxList.indexOf(b)
})

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值