Skip to content

Instantly share code, notes, and snippets.

@alexalannunes
Created September 21, 2023 04:35
Show Gist options
  • Save alexalannunes/9c50e7dec9dd68ad6c3a79de18dfe3ac to your computer and use it in GitHub Desktop.
Save alexalannunes/9c50e7dec9dd68ad6c3a79de18dfe3ac to your computer and use it in GitHub Desktop.
get difference between array of lines. Which fields are different
interface TableRow {
id: number,
fa: {
qty: number
},
fd: {
qty: number
},
ka: {
qty: number
},
}
const original = [
{
id: 23,
fa: {qty: 2},
fd: {qty: 2},
ka: {qty: 2},
},
{
id: 24,
fa: {qty: 2},
fd: {qty: 2},
ka: {qty: 2},
},
];
const newData = [
{
id: 23,
fa: {qty: 2},
fd: {qty: 2},
ka: {qty: 2},
},
{
id: 24,
fa: {qty: 2},
fd: {qty: 2},
ka: {qty: 1},
},
];
interface Output {
id: number,
fa: number,
fd: number,
ka: number,
}
const changes: Partial<Output[]> = [];
const objectIs = (a: object, b: object) => JSON.stringify(a) === JSON.stringify(b)
original.forEach((item, index) => {
const cp = newData[index] as TableRow;
const obj = {} as Partial<Output>;
obj.id = item.id;
for (const key in item) {
const itemKey = key as keyof Partial<TableRow>
if (typeof cp[itemKey] === 'object' && typeof item[itemKey] === 'object') {
if (!objectIs(cp[itemKey] as object, item[itemKey] as object)) {
obj[itemKey] = ((cp[itemKey] as keyof Pick<TableRow, 'fa' | 'fd' | 'ka'> & number) as any).qty
}
}
else {
if (cp[itemKey] !== item[itemKey]) {
obj[itemKey] = cp[itemKey] as any
}
}
}
changes.push(obj as Output);
});
console.log({ changes });