Created
September 21, 2023 04:35
-
-
Save alexalannunes/9c50e7dec9dd68ad6c3a79de18dfe3ac to your computer and use it in GitHub Desktop.
get difference between array of lines. Which fields are different
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgCpwEYBsICUD2A7sgN4BQyywAJgFzIgCuAthtADQXLz3mWUBHMAE96TVtC4BfTpRh1SXQSLEs2UabOQBrOLyXIhohmsmUZZKWTIJ8IAM5hk+KMADmoOFmQBeZAG0uPn4aegAmAGYtOT1SI3CLfm4FEnjkMMT+XV40jK1M4MpQ9IAWaO5Y1JV0zLkU3NqdSob8zgBdAG5rWwcnEAhCABE4MDhfAKCDYsjynjjqvIN5HIXG7PnjRfMtQqoFMLKl5tXZ+pODdarjAEZMi07rUEhYRBQAeUYwAAdPxSKFcTqLRzQEcLjLEwSKBadag6GWbp2RzIBAACzgIDcEHs9AACnAoGBgF4ADwfb6ffxtAB84ypXRsSKc+AwACsIAgwABJezjAAUsRZ7M57GQGHoQo5YAAlL5aQApADKbwAcgA6RyuTHAGDCAWynyG5BK1UasBajy6vkYaXWFzuTxYNUwFwAUUQqL5fOAkGYotA1AgAA8DbTgj1kQgvuN+kMRnB-AHg21kHBeehsHgiAzKBHmWzxiQpKnefjCcSsGTPj8wNSc842WqaOMfRBmE3qPWXVBkHy8zoIMIqCAqL7ZeQDP3W8wANKD8baedpgfCfAwZBlomkjM4AiEanWJI63siL4QNcor6J31z4Qpw1+ADkks5j+QADJ38hT+f19Pr22t73kaz5slKj7jgYRTrnyACEL7cvYfZXtOQElg2wpgP6voAbOg4psuCHSpBSRJEKuFoX4XpRhR+HoYuq7rriwAINoJI7lmhCio+8BvgAPsgPHUPxgm6I+tJfnCsrLhiwjSmqRhQcgVhJCp-AQFg9goLs0G9jRqF0bBRr-gZd4kaRlDkaZ96XrRd7obJSlqeY0iHii6KYtiao-PYnpCuh5I1tKXRSMFiIOPgOBqlg+BuHyJDuRiWK8qFHRAA