valor texto obtener multiple asignar array agrupar javascript underscore.js

javascript - texto - obtener valor de un select jquery



Agrupe por varios valores de subrayado.JS pero mantenga las claves y los valores (2)

Me gustaría contribuir con un buen grupo de ES6 mecanografiado por.
No estoy realmente seguro de cómo ajustar el valor de retorno escribiendo. Se necesitan algunos trucos, pero esto funciona bastante bien para mí.

/** * group the supplied list by a set of keys. * @param list the list of items to group. * @param children the key for the array of child items. * @param components the components to group by. */ groupByMultipleFields<T, K extends keyof T>( list: T[], children: string, ...components: K[]): any[] { var grouping = [...list.reduce((r, o) => { const key = components.map(_ => `${o[_]}`).join(" :: "); var keyed = r.get(key) || components.reduce((x, y) => { x[y] = o[y]; return x; }, <T>{}); keyed[children] = keyed[children] || []; keyed[children].push(o); return r.set(key, keyed); }, new Map).values()]; return grouping; }

Tendrá que activar la opción del compilador de "downlevelIteration": true para permitir que el new Map itere y devuelva los values() .

Estoy tratando de agrupar la siguiente matriz con objetos:

[ { user_id: 301, alert_id: 199, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 107293 }, { user_id: 301, alert_id: 200, deal_id: 277470 } ]

Como puede ver, contiene combinaciones user_id y alert_id, que me gusta agrupar. Así que me gustaría tener la siguiente matriz:

[ { user_id: 301, alert_id: 199, deals: [32243] }, { user_id: 301, alert_id: 200, deals: [32243,107293,277470]}]

¿Alguien sabe una solución para esto? Con el subrayado GroupBy puedo agrupar los valores en función de una clave. Pero necesito agruparlos, según la combinación user_id AND alert_id, como puede ver.

Eché un vistazo a underscore.nest , pero el problema es que crea sus propias claves.


Use groupBy con una función que crea una clave compuesta usando user_id y alert_id. Luego haga un mapa a través de las agrupaciones para obtener lo que desea:

var list = [ { user_id: 301, alert_id: 199, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 32243 }, { user_id: 301, alert_id: 200, deal_id: 107293 }, { user_id: 301, alert_id: 200, deal_id: 277470 } ]; var groups = _.groupBy(list, function(value){ return value.user_id + ''#'' + value.alert_id; }); var data = _.map(groups, function(group){ return { user_id: group[0].user_id, alert_id: group[0].alert_id, deals: _.pluck(group, ''deal_id'') } });