A map
função em underscore.js, se chamada com um objeto javascript, retorna uma matriz de valores mapeados a partir dos valores do objeto.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
existe uma maneira de fazê-lo preservar as chaves? ou seja, eu quero uma função que retorne
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
xuanji
fonte
fonte
Respostas:
Com sublinhado
O sublinhado fornece uma função
_.mapObject
para mapear os valores e preservar as chaves.DEMO
Com Lodash
O Lodash fornece uma função
_.mapValues
para mapear os valores e preservar as chaves.DEMO
fonte
_.map()
está retornando[['one', 3], ['two', 6], ['three', 9]]
, que é uma matriz de matrizes, e a_.object()
transforma em um objeto.Consegui encontrar a função necessária no lodash, uma biblioteca de utilidades semelhante ao sublinhado.
http://lodash.com/docs#mapValues
fonte
fonte
Eu sei que isso é antigo, mas agora o Underscore tem um novo mapa para objetos:
Obviamente, você pode criar um mapa flexível para matrizes e objetos
fonte
mapObject
; observe omapValues
método de lodash .Que tal esta versão em JS simples ( ES6 / ES2015 )?
jsbin
Se você deseja mapear sobre um objeto recursivamente (mapear objeto aninhado), isso pode ser feito assim:
jsbin
Desde o ES7 / ES2016, você pode usar em
Object.entries
vez deObject.keys
:fonte
Eu sei que já faz muito tempo, mas ainda está faltando a solução mais óbvia via fold (também conhecida como redução em js), por uma questão de integridade, deixarei aqui:
fonte
_.map retorna uma matriz, não um objeto.
Se você quer um objeto, é melhor usar uma função diferente, como
each
; se você realmente quiser usar o mapa, poderá fazer algo assim:mas isso é confuso, ao ver
map
um seria esperado ter uma matriz como resultado e, em seguida, fazer algo com ela.fonte
map
usado para alterar uma entrada que produz uma matriz como saída, você pode compor_.object
e_.map
como @GG. escreveu, mas isso é uma questão de gosto neste momento.Eu acho que você deseja uma função mapValues (para mapear uma função sobre os valores de um objeto), que é fácil o suficiente para se implementar:
fonte
fonte
Uma correção de mix para o bug de sublinhado do mapa : P
Uma solução simples que mantém a tecla correta e retorna como objeto. Ainda é usada da mesma maneira que eu convidava. Você poderia usar essa função para substituir a função _.map.
ou simplesmente como eu o usei como um mixin
fonte
Você pode usar
_.mapValues(users, function(o) { return o.age; });
no Lodash e_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
no Underscore.Confira a documentação cruzada aqui: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
fonte