the reduce method accept a second optional argument, that argument would be the starting value of the accumulator (in this case of the callback parameter obj), otherwise the starting value is the first item in the array
The signature of .reduce() looks like this: array.reduce( function(accumulator, nextVal, index, array) {// your code here}, ?initAccumulatorVal);
So the empty object passed in as the second parameter to .reduce() will serve as the initial value of the accumulator, while nextVal will be assigned the first item in the array. If no initial value is provided then the accumulator will be assigned the first item in the array, and nextVal will be assigned the second item in the array (in the first iteration of the loop, that is).