JS数组对象合并之后去重

需求:这是预提交所有挑拨设备页面,点击选择设备打开条件筛选设备。
在这里插入图片描述
在选择设备页面,选择出需要挑拨的设备,再把已经选择的设备批量添加到预备调拨的列表中,每次批量添加的时候,需要去掉之前已经选择过的设备,避免重复项。
在这里插入图片描述

解决思路一:

连个数组双重循环对比,如果出现相同设备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一些用法:

  1. 常用于数组求和,求乘积
  2. 计算数组中每个元素出现的次数
  3. 对象里的属性求和
  4. 数组去重
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章