La map
función en underscore.js, si se llama con un objeto javascript, devuelve una matriz de valores asignados a partir de los valores del objeto.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
¿hay alguna manera de hacer que conserve las llaves? es decir, quiero una función que devuelva
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
xuanji
fuente
fuente
Respuestas:
Con subrayado
El subrayado proporciona una función
_.mapObject
para asignar los valores y preservar las claves.DEMO
Con lodash
Lodash proporciona una función
_.mapValues
para asignar los valores y preservar las claves.DEMO
fuente
_.map()
está regresando[['one', 3], ['two', 6], ['three', 9]]
, que es una matriz de matrices, y lo_.object()
está volviendo a convertir en un objeto.Logré encontrar la función requerida en lodash, una biblioteca de utilidades similar al guión bajo.
http://lodash.com/docs#mapValues
fuente
fuente
Sé que esto es antiguo, pero ahora Underscore tiene un nuevo mapa para objetos:
Por supuesto, puede crear un mapa flexible para matrices y objetos.
fuente
mapObject
; mira elmapValues
método de lodash en su lugar.¿Qué tal esta versión en JS simple ( ES6 / ES2015 )?
jsbin
Si desea mapear sobre un objeto de forma recursiva (mapear obj anidado), puede hacerlo así:
jsbin
Desde ES7 / ES2016 puede usar en
Object.entries
lugar deObject.keys
esto:fuente
Sé que ha pasado mucho tiempo, pero aún falta la solución más obvia a través de fold (también conocido como reducir en js), por razones de integridad lo dejaré aquí:
fuente
_.map devuelve una matriz, no un objeto.
Si quieres un objeto, es mejor que uses una función diferente, como
each
; si realmente quieres usar el mapa, puedes hacer algo como esto:pero eso es confuso, al ver
map
uno esperaría tener una matriz como resultado y luego hacer algo con ella.fuente
map
se usa para cambiar una entrada que produce una matriz como salida, podría componer_.object
y_.map
como @GG. escribió, pero eso es cuestión de gustos en este momento.Creo que quieres un mapa función (para asignar una función sobre los valores de un objeto), que es lo suficientemente fácil de implementar usted mismo:
fuente
fuente
Una solución mixta para el error de mapa de subrayado : P
Una solución simple que mantiene la clave correcta y devuelve como objeto Todavía se usa de la misma manera que i guest, podría usar esta función para anular la función _.map con errores
o simplemente como lo usé como mezcla
fuente
Puedes usar
_.mapValues(users, function(o) { return o.age; });
en Lodash y_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
en .Consulte la documentación cruzada aquí: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
fuente