Ejemplo de entrada:
[{'size': '56 X 56 X 190', 'no_of_ups': 5}, {'size': '65 X 55 X 110', 'no_of_ups': 2}]Salida correspondiente:
[{'56 X 56 X 190': 5}, {'65 X 55 X 110': 2}]¿Cómo creamos una matriz de Objeto a partir de la matriz de entrada de Objeto que tiene un número fijo de claves y creamos una nueva matriz de Objeto que tiene un valor determinado de clave como clave y un valor determinado de valor como valor de esa clave?
Básicamente, queremos transformar la matriz de entrada de Object en el valor de 'size' como clave y el valor de 'no_of_ups' como valor.
(Si el orden de los argumentos parece extraño, es porque asumo [módulo lodash/fp ] Esta es la función que desea ejecutar en su argumento:
f = _.compose(_.spread(_.zipObject), _.unzip, _.map(_.over(['size', 'no_of_ups'])));Y aquí está en acción:
arr = [{'size': '56 X 56 X 190', 'no_of_ups': 5}, {'size': '65 X 55 X 110', 'no_of_ups': 2}]; f = _.compose(_.spread(_.zipObject), _.unzip, _.map(_.over(['size', 'no_of_ups']))); console.log(f(arr)) <script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>Y aquí hay un poco de explicación:
_.map(_.over(['size', 'no_of_ups'])) ejecuta _.over(['size', 'no_of_ups']) en cada elemento,_.over(['size', 'no_of_ups']) simplemente elige 'size' y 'no_of_ups' del elemento y coloca los dos resultados en una matriz), por lo que obtiene una matriz de matrices, en este caso [["56 X 56 X 190", 5], ["65 X 55 X 110", 2]] ;_.unzip transpone fundamentalmente la matriz de matrices, en este caso le da [["56 X 56 X 190", "65 X 55 X 110"], [5, 2]]_.spread(_.zipObject) alimenta los dos arreglos internos como argumentos separados por comas a _.zipObject , que construye objetos a partir de los dos arreglos, usándolos como el arreglo de claves y el arreglo de valores, brindándole así el resultado final resultado. Si realmente desea una matriz de objetos en lugar de un solo objeto, puede cambiar _.zipObject por _.zipWith((x,y) => ({[x]: y})) .
Input - [{'size': '56 X 56 X 190', 'no_of_ups': 5}, {'size': '65 X 55 X 110', 'no_of_ups': 2}] Input.forEach((val)=>{ j= {}; j[val[size]]=val[no_of_ups]; Output.push(j) });
Una de las formas más legibles de hacer esto probablemente sería en JavaScript normal.
const output = input.map(({ size, no_of_ups }) => ({ [size]: no_of_ups })); La expresión ({ size, no_of_ups }) => ({ [size]: no_of_ups }) puede ser un poco confusa, pero es solo una función de flecha normal.
({ size, no_of_ups }) define los argumentos. En este escenario, un solo objeto que desestructuraremos en size y no_of_ups .
({ [size]: no_of_ups }) es el valor de retorno de la función de flecha. Usaremos un nombre de propiedad calculado para establecer dinámicamente el valor de la clave y asignarle el valor de no_of_ups . La razón por la que el objeto está entre paréntesis es para decirle a JavaScript que estamos evaluando una expresión. Sin ellos, el motor de JavaScript asume que sigue un bloque de código.
input.map(({ size, no_of_ups }) => { // <- without parentheses is assumed to be a codeblock return { [size]: no_of_ups }; });