实际场景,做一个IM即时通讯软件,本地数据库联系人,每次登录的时候,会通过http请求服务端数据返回最新的列表,这个时候就需要根据最新的列表对比当前本地数据库,删除了多少个,新增了多少个,然后操作数据库进行新增或者删除操作
给定数组
const oldArr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const newArr = [3, 4, 5, 6, 7, 8, 100];
根据 newArr 判断 oldArr 新增了那些数据,删除了那些数据?
要求时间复杂度 O(n)
// 如下:
function main() {
// coding
}
const result = main(oldArr, newArr);
console.log("result :>> ", result);
// result :>> { newData: [ 100 ], deleteData: [ 1, 2, 9 ] }
答案如下:
const oldArr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const newArr = [3, 4, 5, 6, 7, 8, 100];
function main(oldArr, newArr) {
const set = new Set(oldArr);
const newItems = [];
newArr.forEach((item) => {
if (set.has(item)) {
set.delete(item);
} else {
// 新增的值
newItems.push(item);
}
});
return {
newData: newItems,
deleteData: [...set],
};
}
const result = main(oldArr, newArr);
console.log("result :>> ", result);
// result :>> { newData: [ 100 ], deleteData: [ 1, 2, 9 ] }