需求:这是预提交所有挑拨设备页面,点击选择设备打开条件筛选设备。
在选择设备页面,选择出需要挑拨的设备,再把已经选择的设备批量添加到预备调拨的列表中,每次批量添加的时候,需要去掉之前已经选择过的设备,避免重复项。
解决思路一:
连个数组双重循环对比,如果出现相同设备ID就删除掉,然后再连接两个数组,但是觉得麻烦,所以不推荐。
解决思路二:
先合两个数组,再对数组进行去重。
/*
* 确认已选择放入预备调拨的设备列表
* */
confirm () {
//连接两个数组
let data = this.tableParams.totalData.concat(
this.tableChoseParams
);
//删除重复选择的设备
let hash = {}
data = data.reduce((item, next) => {
if (!hash[next.id]) {
hash[next.id] = true
item.push(next)
}
return item
}, [])
this.tableParams.totalData = data
//前端分页处理
this.tableParams.data = this.tableParams.totalData.slice(0, 10)
this.dialogDeviceVisible = false;
}
- concat() 方法用于连接两个或多个数组。
arrayObject.concat(arrayX,arrayX,......,arrayX)
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
- reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
reduce一些用法:
- 常用于数组求和,求乘积
- 计算数组中每个元素出现的次数
- 对象里的属性求和
- 数组去重