recorrer objetos objeto metodos lista eliminar elemento convertir buscar array agregar javascript arrays object lodash

objetos - metodos en javascript



transformar objeto a matriz con lodash (8)

¿Cómo puedo transformar un object grande en una array con lodash?

Ejemplo:

var obj = { 22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],} 12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],} } // transform to var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]

¡Gracias!


Actualización de 2017: Object.values , lodash values y lodash.com/docs#toArray do it. Y para preservar el map teclas y extender el juego , juega agradable:

// import { toArray, map } from ''lodash'' const map = _.map const input = { key: { value: ''value'' } } const output = map(input, (value, key) => ({ key, ...value })) console.log(output) // >> [{key: ''key'', value: ''value''}])

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>


Además de todas las respuestas existentes (que son realmente buenas y perfectas), simplemente agregue otro enfoque aquí:

También puede usar la función _.map (tanto de lodash como de underscore ) con un object , manejará internamente ese caso, iterará sobre cada valor y clave con su iteratee, y finalmente devolverá una matriz. De hecho, puede usarlo sin ninguna iteración (solo _.map(obj) ) si solo quiere una matriz de valores. Lo bueno es que, si necesita una transformación intermedia, puede hacerlo de una vez.

Ejemplo:

var obj = { key1: {id: 1, name: ''A''}, key2: {id: 2, name: ''B''}, key3: {id: 3, name: ''C''} }; var array1 = _.map(obj, v=>v); console.log(''Array 1: '', array1); /*Actually you don''t need the callback v=>v if you are not transforming anything in between, v=>v is default*/ //SO simply you can use var array2 = _.map(obj); console.log(''Array 2: '', array2);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

Sin embargo, si desea transformar su objeto puede hacerlo, incluso si necesita conservar la clave, puede hacerlo ( _.map(obj, (v, k) => {...} ) con un argumento adicional en el map y luego usarlo como quieras.


Para mí, esto funcionó:

_.map(_.toPairs(data), d => _.fromPairs([d]));

Da vueltas

{"a":"b", "c":"d", "e":"f"}

dentro

[{"a":"b"}, {"c":"d"}, {"e":"f"}]


Si desea que la clave (id en este caso) se conserve como propiedad de cada elemento de matriz, puede hacerlo

const arr = _(obj) //wrap object so that you can chain lodash methods .mapValues((value, id)=>_.merge({}, value, {id})) //attach id to object .values() //get the values of the result .value() //unwrap array of objects


Si desea una asignación personalizada (como Array.prototype.map) original de Object en una matriz, puede simplemente usar _.forEach :

let myObject = { key1: "value1", key2: "value2", // ... }; let myNewArray = []; _.forEach(myObject, (value, key) => { myNewArray.push({ someNewKey: key, someNewValue: value.toUpperCase() // just an example of new value based on original value }); }); // myNewArray => [{ someNewKey: key1, someNewValue: ''VALUE1'' }, ... ];

Ver lodash doc of _.forEach https://lodash.com/docs/#forEach


Tu puedes hacer

var arr = _.values(obj);

Para documentación ver here.


Una solución nativa moderna si alguien está interesado (gracias por la mejora de Koushik):

const arr = Object.keys(obj).map(key => ({ key, value: obj[key] }));


_.toArray(obj);

Salidas como:

[ { "name": "Ivan", "id": 12, "friends": [ 2, 44, 12 ], "works": { "books": [], "films": [] } }, { "name": "John", "id": 22, "friends": [ 5, 31, 55 ], "works": { "books": [], "films": [] } } ]"