Este fragmento, que usa _.forEach de _.forEach ,
_.forEach({ 'a': 1, 'b': 2 }, function(value, key) { console.log(key + '=' + value); })huellas dactilares
a=1 b=2 ¿Cómo funciona _.forEach en lodash/fp ?
Si pruebo el fragmento anterior, en la consola da como resultado
ƒ (value, key) { console.log(key + '=' + value); }que está cerca de "No lo estoy usando como debería".
Si trato de invertir las dos entradas (ya que en realidad es una de las principales diferencias entre lodash y lodash/fp ),
_.forEach(function(value, key) { console.log(key + '=' + value); }, { 'a': 1, 'b': 2 })yo obtengo
undefined=1 undefined=2 Entonces mi pregunta es: ¿hay alguna manera de _.forEach en un objeto a través lodash/fp y tener acceso tanto a las claves como a los valores del objeto?
Los parámetros de la función iteratee están limitados en Lodash FP
Citando la documentación:
Argumentos iterados limitados
Los argumentos iterados están limitados para evitar trampas con iterados variados.
// The `lodash/map` iteratee receives three arguments: // (value, index|key, collection) _.map(['6', '8', '10'], parseInt); // ➜ [6, NaN, 2] // The `lodash/fp/map` iteratee is capped at one argument: // (value) fp.map(parseInt)(['6', '8', '10']); // ➜ [6, 8, 10]
Las diferentes funciones en Lodash FP tendrán el iterado limitado a solo 1 parámetro: _.forEach() está entre ellos. Los únicos tres que tienen el iterado limitado a dos son _.reduce() , _.reduceRight() y _.transform() .
Para iterar sobre claves y valores en Lodash FP, puede usar _.forEach() sobre _.entries() . Como eso da las entradas como pares clave-valor, puede desestructurarlas:
const obj = { 'a': 1, 'b': 2 }; _.forEach(function([value, key]) { // destructure the pair console.log(key + '=' + value); }, _.entries(obj)) // get as pairs <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script> Una forma más legible sería componerlos con _.flow()
const obj = { 'a': 1, 'b': 2 }; const process = _.flow( _.entries, _.forEach(function([value, key]) { console.log(key + '=' + value); }) ); process(obj); <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script> Finalmente, puede evitar la desestructuración, si lo desea, usando _.spread() :
const obj = { 'a': 1, 'b': 2 }; const process = _.flow( _.entries, _.forEach(_.spread(function(value, key) { console.log(key + '=' + value); })) ); process(obj); <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>