用书籍上的文章做网站更新,wordpress注册未发送邮件,用wordpress建仿站,做网站类型在集合A和集合B中#xff0c;属于集合A#xff0c;同时也属于集合B的元素组成的集合#xff0c;就是交集。
在A中所有不属于集合B元素#xff0c;组合成集合#xff0c;就是差集。
那么在平时的开发中#xff0c;如何使用差集和交集来解决问题呢#xff1f;
现在有这…在集合A和集合B中属于集合A同时也属于集合B的元素组成的集合就是交集。
在A中所有不属于集合B元素组合成集合就是差集。
那么在平时的开发中如何使用差集和交集来解决问题呢
现在有这样的场景在一个表格编辑数据后要把编辑前的数据和修改后的数据汇总。
源数据为
const arr1 [{ name: 11, id: 1 }, { name: 21, id: 2 }, { name: 31, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }];在页面中表现为 现在删除第一行数据第二行的名字改为2109第三行的名字改为3321然后新增两行分别为71、81。
数据如下
const arr2 [{ name: 2109, id: 2 }, { name: 3321, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }, { name: 71, id: null }, { name: 81, id: null }];页面为 由于是新增数据还没有提交保存所以对应的序号也就是ID为空。
最终想要的效果图下图所示 需要在表格中体现那些数据是修改、删除、新增哪些数据没有改变。
思路
源数据是一个数组arr1修改后的数据也是一个数组arr2删除的数据在数组arr1中有数组arr2中没有修改的数据在数组arr1和arr2中都找对应的ID新增的数据只出现在数组arr2中。
那么数组arr2与数组arr1的差集就是新增的数据
let add arr2.filter(x arr1.every(y y.id ! x.id))数组arr1与数组arr2的差集就是删除的数据
let del arr1.filter(x arr2.every(y y.id ! x.id))修改或者没有修改数据就是数组arr1和数组arr2的交集
// arr1、arr2的交集
let arr12Inter arr1.filter(x arr2.some(y x.id y.id))
let arr21Inter arr2.filter(x arr1.some(y x.id y.id))最后一步就是组合所有的差集、交集汇总成新的数组
for (let index 0; index arr12Inter.length; index) {newArr.push({ oldData: arr21Inter[index], newData: arr12Inter[index] })
}del.forEach(item newArr.push({ oldData: item, newData: null }))
add.forEach(item newArr.push({ oldData: null, newData: item }))完整代码
const arr1 [{ name: 11, id: 1 }, { name: 21, id: 2 }, { name: 31, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }];const arr2 [{ name: 2109, id: 2 }, { name: 3321, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }, { name: 71, id: null }, { name: 81, id: null }];
let newArr [];
// arr1——arr2的差集:删除
let del arr1.filter(x arr2.every(y y.id ! x.id))// arr2——arr1的差集新增
let add arr2.filter(x arr1.every(y y.id ! x.id))// arr1、arr2的交集修改
let arr12Inter arr1.filter(x arr2.some(y x.id y.id))
let arr21Inter arr2.filter(x arr1.some(y x.id y.id))console.log(arr1与arr2的差集, del)
console.log(arr2与arr1的差集, add)
console.log(交集, arr12Inter, arr21Inter)for (let index 0; index arr12Inter.length; index) {newArr.push({ oldData: arr21Inter[index], newData: arr12Inter[index] })
}del.forEach(item newArr.push({ oldData: item, newData: null }))
add.forEach(item newArr.push({ oldData: null, newData: item }))console.log(汇总, newArr)使用交集、差集仅仅是一种方式