https://medium.com/@theNewGenCoder/difference-between-rest-and-spread-operators-in-javascript-3db9dab31f16