求对象数组的差集是我在开发中遇到的一个需求,场景是这样:用户第一次选择了1、2、3对象,并确定保存进了数据库,用户第二次进入的时候觉得不对,选择了3、4、5对象,然后保存进数据库。
这么一个需求的分析有:用户第二次选择的时候,3是不用做处理的,4、5是要新插入数据库的,而1、2是要在数据库中删除的,得给标识让数据库脚本识别并进行删除,不然就是垃圾数据
对于求对象数组的差集,我是想不到有什么其他高效的方法了,以下是我的处理方式,state为3表明是要进行删除的对象
// 第一次选择
var temp = [{ id: "1", state: 1 }, { id: "2", state: 1 }, { id: "3", state: 1 }];
// 第二次选择
var selected = [{ id: "3", state: 1 }, { id: "4", state: 1 }, { id: "5", state: 1 }];
// 最终保存
var save = [];
function test() {
for (var i = 0; i < temp.length; i++) {
var flag = false;
for (var j = 0; j < selected.length; j++) {
if (temp[i].id == selected[j].id) {
flag = false;
break;
}
else {
flag = true;
}
}
if (flag) {
temp[i].state = 3;
save.push(temp[i]);
}
}
for (var i = 0; i < selected.length; i++) {
var flag = false;
for (var j = 0; j < temp.length; j++) {
if (selected[i].id == temp[j].id) {
flag = false;
break;
}
else {
flag = true;
}
}
if (flag) {
save.push(selected[i]);
}
}
console.log("差集结果", save);
}
test();