В чем разница между этими двумя методами при итерации по объекту?
Разница между _.forEach и _.forOwn в lodash
Ответ 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