JSFiddle - React, Tailwind, and code Playground
by Bahman ParsaManesh
JavaScript
/* const a = [1,5,2,3]
uniqueArray = new Map([...a.entries()].sort((a,b) => a[0] - b[0]))
console.log([...uniqueArray])
console.log(new Date('2018-03-12T12:34:00Z').toString())
console.log(new Date('2018-03-12T12:44:00Z').toString())
console.log((new Date('2018-03-12T12:44:00Z') - new Date('2018-03-12T12:34:00Z')).toString()) */
const app = {
getBalanceByCategoryInPeriod: (transactions = [], category, start, end) => {
return (transactions.length === 0) ? 0 : transactions.reduce((balance, transaction) => {
return ((transaction.category === category)
&& (new Date(transaction.time) >= start)
&& (new Date(transaction.time) < end)) ? balance + transaction.amount : balance;
}, 0);
},
isDuplicate: (trA, trB) => {
return ((trA.sourceAccount === trB.sourceAccount)
&& (trA.targetAccount === trB.targetAccount)
&& (trA.category === trB.category)
&& (trA.amount === trB.amount)
&& (app.diffMinutes(trA.time, trB.time) < 1));
},
diffMinutes: (dateTimeA, dateTimeB) => {
return Math.abs((new Date(dateTimeA) - new Date(dateTimeB)) / 60000);
},
sortTransactionsByTime: (trA, trB) => {
return (new Date(trA.time)) - (new Date(trB.time));
},
findDuplicateTransactions: (transactions = []) => {
let duplicatedTransactions = [];
if (transactions.length < 2) return duplicatedTransactions;
transactions.sort(app.sortTransactionsByTime);
transactions.forEach(transaction => {
/* console.log(duplicatedTransactions) */
let foundDuplicatedGroup = false;
for (let duplicatedGroup of duplicatedTransactions) {
if (app.isDuplicate(transaction, duplicatedGroup[duplicatedGroup.length - 1])) {
duplicatedGroup.push(transaction);
foundDuplicatedGroup = true;
break;
}
}
...