根据 newArr 判断 oldArr 新增了那些数据,删除了那些数据? 要求时间复杂度 O(n)

157 阅读1分钟

实际场景,做一个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 ] }