https://nodeschool.io/
http://reactivex.io/learnrx/
https://www.codewars.com/kata/search/my-languages?q=&tags=Arrays&beta=false&order_by=rank_id+asc
I use .call() and .apply() all the time, especially if I want to “cherry-pick” methods from other objects or classes. Not really the best example, but you can see this in action here:
http://cl.ly/image/1Y46341Z0b3l
In actual Object Oriented Programming, though, those two methods can be really helpful.
That aside, if you do any VANILLA JavaScript DOM manipulation, then you’ll know that using any DOM-querying method other than .getElementById or .querySelector will return a node LIST instead of a single node ELEMENT. This means that you have to iterate over each item in the node list to do something. Catch here is that the node list is an array-like object but not a TRUE array. So you can’t run a forEach loop on it or any other array method. What I like to do is to “cherry-pick” the .slice() method from the Array prototype and then use .call() while passing in the node list to actually turn the node list into a real array. See here:
http://cl.ly/image/3X260n1g3A1o
And finally, the arguments object of a function is also an array-like object and as such can be converted into an array in the same fashion. See here:
http://cl.ly/image/1f371t0C1S3z
So, I know I didn’t give you a link to a place that has exercises to practice these things, but given the latter two examples, you could try doing some basic DOM manipulation or something similar with vanilla JavaScript (so no jQuery!) and try making use of some of those methods. This will also let you use things like .map() or .reduce() or .filter() on these DOM els after you convert them into arrays from array-like objects.