How about the following solution?

    let missingArgument = {}; // or a symbol
    function reduce(callback, initial = missingArgument){
        let startIndex;
     
        if (initial === missingArgument) {
            initial = this[0];
            startIndex = 1;
        } else {
            startIndex = 0;
        }
     
        ...etc...
    }

On Dec 24, 2012, at 3:32 , Allen Wirfs-Brock <[email protected]> wrote:

> On Dec 23, 2012, at 5:35 PM, Brandon Benvie wrote:
> 
>> Here's one of the examples that was sticking out in my mind earlier that 
>> Brendan's solution takes care of. Array.prototype.reduce requires that if 
>> the initial value isn't provided then the first value of the array is the 
>> initial value.
>> 
>> Using rest:
>> 
>>    function reduce(callback, ...initial){
>>      var current, index;
>> 
>>      if (initial.length) {
>>        index = 0;
>>        current = initial[0];
>>      } else {
>>        index = 1;
>>        current = this[0];
>>      }
>> 
>>      ...etc...
>>    }
>> 
> 
> the way I would express this example  is:
> 
> function reduce(callback, ...rest){
>  var current, index;
>  if (rest.length > 0) {
>        index = 0;
>        current = rest[0];
>      } else {
>        index = 1;
>        current = this[0];
>      }
>  ...etc...
> }
> 
> which seems to exactly express the intent

-- 
Dr. Axel Rauschmayer
[email protected]

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to