/ / ¿Cómo usar el encadenamiento cuando se usan módulos Lodash 3.0? - javascript, node.js, lodash

¿Cómo usar el encadenamiento cuando se usan módulos Lodash 3.0? - javascript, node.js, lodash

El siguiente es un ejemplo de sesión de respuesta de nodo:

$ mkdir /tmp/foo
$ cd /tmp/foo
$ npm install lodash
lodash@3.0.0 node_modules/lodash
$ node
> var chain = require("lodash/chain/chain")
> var map = require("lodash/collection/map")
> var value = require("lodash/chain/value")
> var fruits = ["apple", "banana", "cherry"]
> chain(fruits)
{ __actions__: [],
__chain__: true,
__wrapped__: [ "apple", "banana", "cherry" ] }
> value.call(chain(fruits))
[ "apple", "banana", "cherry" ]
> var capitalize = require("lodash/string/capitalize")
> map(fruits, capitalize)
[ "Apple", "Banana", "Cherry" ]
> map(chain(fruits), capitalize)
[ "",
"True",
"Apple,banana,cherry" ]

Idealmente, tendría una función de mapa que puede recibir un objeto de cadena de lodash y devolver un objeto de cadena de lodash para poder utilizar la nueva pereza de encadenar en Lodash 3.0. Algo como esto:

> value(map(chain(fruits)))
[ "Apple", "Banana", "Cherry" ]

Entiendo que lo siguiente funciona como se espera:

> var lodash = require("lodash")
> lodash(fruits).map(lodash.capitalize).value()
[ "Apple", "Banana", "Cherry" ]

Preferiría usar módulos y solo requeriría lo que usaré porque lo usaré en un cliente web.

Respuestas

2 para la respuesta № 1

Si utiliza versiones modulares de las funciones de lodash, no pueden saber qué otras funciones están cargadas y disponibles, por lo que no sería fácil hacer que funcionen de forma inmediata.

Sin embargo, lo que puede hacer es crear su propia compilación personalizada de lodash que contendrá solo las funciones que necesita.

En tu caso sería solo:

lodash modern include=chain,value,map,capitalize

y luego puedes usarlo igual que la versión normal:

> var lodash = require("./lodash.custom.js")
> var fruits = ["apple", "banana", "cherry"]
> lodash(fruits).map(lodash.capitalize).value()
[ "Apple", "Banana", "Cherry" ]

mientras que el archivo js es 5x más pequeño que el original.