const taxRates = [ { "country": "BG", "rates": [ { "date": "2020-01-01", "rate": 10, }, { "date": "2020-06-01", "rate": 15, }, { "date": "2021-01-01", "rate": 20, } ] }, { "country": "US", "rates": [ { "date": "2020-01-01", "rate": 10, }, { "date": "2021-01-01", "rate": 15, } ], } ]; function findTaxRate(country, taxPointDateString) { const taxRate = taxRates.find((rate) => { return rate.country === country; }); const taxPointDate = Date.parse(taxPointDateString); let resultRate; taxRate.rates.forEach(({ date, rate }) => { const dateObject = Date.parse(date); if (dateObject <= taxPointDate) { resultRate = rate; } }); if (!resultRate) { throw new Error('Cannot determine rate!'); } return resultRate; } console.log(findTaxRate('BG', '2020-03-01')); console.log(findTaxRate('BG', '2020-06-01')); console.log(findTaxRate('BG', '2020-09-01')); console.log(findTaxRate('BG', '2021-01-01')); console.log(findTaxRate('BG', '2021-03-01')); console.log(findTaxRate('BG', '2021-06-01')); console.log(findTaxRate('US', '2020-03-01')); console.log(findTaxRate('US', '2020-06-01')); console.log(findTaxRate('US', '2021-01-01')); console.log(findTaxRate('US', '2021-03-01')); console.log(findTaxRate('US', '2018-03-01'));