export interface IArrayUpdate { add: T[]; del: T[]; same: T[]; } export function arrayUpdate(before: T[], after: T[]) { before = before.slice().sort(); const add = after.slice().sort(); const del = []; const same = []; next: while (before.length) { const item = before.pop(); for (let j = add.length - 1; j >= 0; j--) { if (item === add[j]) { same.push(item); add.splice(j, 1); continue next; } } del.push(item); } return {add, del, same}; }