Promise and other
There's more to these functions than meets the eye. Let's take the innocent
Array.prototype.map for example. Are you aware that:
[1, 2, , 4].map(val => val * val) === [1, 4, , 16].
map is set before the first call to callbackfn. Elements which are appended to the array after the call to
map begins will not be visited by callbackfn. If existing elements of the array are changed, their value as passed to callbackfn will be the value at the time
map visits them; elements that are deleted after the call to
map begins and before being visited are not visited. Source:
Array.prototype.map ECMAScript specification
Your implementation doesn't have to handle all of these cases, especially the array mutation one. However, it's a positive signal if you mentioned these cases. The closer your implementation is to the specification, the more senior/experienced you will appear to be.
If you take a look at the source code of these libraries, you might find some of the implementation to be quite complex. This is because there are lots of obscure real world use cases that the library has to support. Similar to the standard functions, you're not expected to handle all of these edge cases within an interview setting but you get points for calling them out.
|Arrays, Maps, Stacks, Trees, Sets
|Binary Search, Breadth-first Search, Depth-first Search, Recursion
|Data types (checking for types, type coercion), Scope, Closures, Callbacks, How
Promise, Handling variadic arguments
|DOM traversal, DOM creation, DOM manipulation, Accessing element/node properties, Event delegation
this matters. If a function accepts a callback function as a parameter, consider how the
this variable should behave. For many built-in functions,
this is provided as one of the arguments the callback function is invoked with.
Note that we are intentionally vague in some of the questions and don't present the full requirements upfront in the question description. However, we'll cover as much ground as possible in the solution. It may be frustrating while reading the solutions to see that you've missed out some things, but this trains you to think ahead and consider what are the possible areas you have to take note of when working on the solution. Better to find out during practice than during actual interviews.