Question

What is the difference between these two methods when iterating over an object?

Était-ce utile?

La solution

The difference lies in that if the collection over which you are iterating is an object which has a length property, then the _.forEach() will iterate over it as if it were an array, whereas the _.forOwn() will iterate over it like an object.

Assume you have the object:

a = {
  x: 100, 
  y: 200, 
  length: 2
}

If you iterate over it as:

_.forEach(a, function(val, key) {
  console.log('a[' + key + '] = ' + val); 
});

you'll get output:

a[0] = undefined
a[1] = undefined 

whereas iterating over it with _.forOwn() you'll get the more reasonable:

a[x] = 100
a[y] = 200
a[length] = 2

Autres conseils

As per the docs for forOwn the iterator must be an object. With _.each and .forEach you can use this on array or an object.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top