bug感悟

发布时间 2023-08-11 17:28:56作者: 崛起崛起

第一段代码

let arr = this.removeData;
arr.map((v) => {
  this.stationtableData.push(v);
});
this.tableData = this.tableData.filter(
  (v) => !arr.some((ele) => ele.buildId === v.buildId)
);

第二段代码

this.removeData.forEach((v) => {
  this.stationtableData.push(v);
});
this.tableData = this.tableData.filter(
  (v) => !this.removeData.some((ele) => ele.buildId === v.buildId)
);

两个代码有什么不同?

这两段代码的主要区别在于在 forEach 方法和 map 方法之间。

map 方法会对 this.removeData 数组中的每个元素执行给定的回调函数,并返回一个新数组,新数组是根据回调函数的返回值生成的。因此,对 this.removeData 数组的修改不会影响原数组。
在第一段代码中,使用 map 方法返回了一个新数组 arr 并对其进行操作,不会改变原始的 this.removeData 数组。然后,使用 arr.some 方法对 this.tableData 数组中的元素进行条件判断。

而第二段代码中,直接使用 this.removeData 数组调用了 forEach 方法,并对 this.stationtableData 数组进行操作,直接改变了原始的 this.removeData 数组。然后,使用 this.removeData.some 方法对 this.tableData 数组中的元素进行条件判断。

因此,这两段代码对 this.removeData 数组的修改及对 this.tableData 数组的条件判断是不同的。如果你希望保留对 this.removeData 原数组的操作和对 this.tableData 的条件判断,则应该选择第一段代码;如果你想在循环过程中直接修改原数组,并对 this.tableData 执行条件判断,则应该选择第二段代码。```