Подтвердить что ты не робот

Разница между _.forEach и _.forOwn в lodash

В чем разница между этими двумя методами при итерации по объекту?

4b9b3361

Ответ 1

Разница заключается в том, что если коллекция, в которой вы выполняете итерацию, является объектом, обладающим свойством length, то _.forEach() будет перебирать его, как если бы это был массив, тогда как _.forOwn() будет итерации над ним, как с объектом.

Предположим, что у вас есть объект:

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

Если вы перебираете его как:

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

вы получите результат:

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

в то время как повторение с помощью _.forOwn() вы получите более разумное:

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