0
点赞
收藏
分享

微信扫一扫

双重循环----删除(避坑)

1、双重for循环删除有坑要注意

在正向遍历删除时,数组长度会变短,数据下标会变化,数据向前移动会漏掉一些数据的比对

解决办法:换成逆向遍历

2、js从一个数组中删除另一个数组中存在的元素

// 从一个数组中删除另一个数组中存在的元素
let array = [{ id: 11 }, { id: 22 }, { id: 33 }, { id: 44 }];
let removeArray = [{ id: 22 }, { id: 44 }];
// 从数组array中删除数组removeArray中存在的元素
let newArray = array.filter((item1) => !removeArray.some((item2) => item1.id === item2.id));
console.log("newArray====", newArray) //[{ id: 11 }, { id: 33 },]

js 数组的 some 方法:

some 方法用于检测数组中元素是否满足指定条件, 通俗点讲: 查找数组中是否有满足条件的元素;方法返回的是布尔值,

如果可以查到这个元素,就会返回true;

如果查找不到就会返回false;

如果找到一个满足条件的元素, 则终止循环, 不在继续查找。

3、两个数组中,一个数组去掉另外一个数组里有的东西

const oneArr = [2, 1]
const twoArr = [1, 2, 3]
// first method
let testArr = twoArr.filter(twoItem => !oneArr.some(oneItem => oneItem === twoItem))
// second method
let testArr = twoArr.filter(twoItem => oneArr.every(oneItem => oneItem !== twoItem))
// third method
let testArr = twoArr.filter(item => !oneArr.includes(item))
console.log(testArr)

4、删除一个数组中包含另一个数组的元素 (两个数组中删除其中重复的数据)

勾选数据就会形成一个勾选的数据,再和现在表格的变量做比较进行删除,尝试过splice,两个数组两层嵌套循环,但好像删除一个数据之后就跳出循环了,所以换了另一种方法

let arrIdList = this.form.selectUsers.map(x => x.id)             // this.form.selectUsers 是勾选的数据
this.warrantData = this.warrantData.filter(x => !arrIdList.includes(x.id))       // this.warrantData 是表格呈现的数据

5、表格比对----删除另一个表格中存在的字段(设计字段权限-----vxeTable)

if (res.data.data.objects.length > 0) {
          this.gridOptions1.columns= this.gridOptions1.columns.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
          this.gridOptions2.columns= this.gridOptions2.columns.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
          this.gridOptions3.columns= this.gridOptions3.columns.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
          for(var i=0;i<this.gridOptions1.columns.length;i++){
            if (this.gridOptions1.columns[i].children) {
              this.gridOptions1.columns[i].children=this.gridOptions1.columns[i].children.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
              this.gridOptions2.columns[i].children=this.gridOptions2.columns[i].children.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
              this.gridOptions3.columns[i].children=this.gridOptions3.columns[i].children.filter((item1) => !res.data.data.objects.some((item2) => item1.field === item2.field))
            }
          }
   }


举报

相关推荐

0 条评论