El método groupBy en JS

Recientemente, necesito escribir algunas páginas de informes de datos operativos. Los datos devueltos por el back-end no son procesados. Por lo tanto, una gran cantidad de tareas de cálculo se transfieren al front-end. Una de las funciones es agrupar los datos. Al principio, también intenté escribir algunos, pero la cantidad de código es relativamente grande, lo que parece muy engorroso. Hasta más tarde, vi un método escrito por una gran vaca en stackoverflow. Es muy simple y elegante. El código es el siguiente:

  

función groupBy (array, f) { 
    let groups = {}; 
    array.forEach (function (o) { 
        let group = JSON.stringify (f (o)); 
        groups [group] = groups [group] || []; 
        groups [group] .push (o); 
    }); 
    return Object.keys (groups) .map (function (group) {
         return groups [group]; 
    }); 
} 
 
let list = [ 
    { " name " : " John " , " Average " : 15 , "Alto " : 10 , " DtmStamp " : 1358226000000 }, 
    { " nombre " : " Jane " , " Promedio " : 16 , " Alto " : 92 , " DtmStamp " : 1358226000000 }, 
    { " nombre " : " Jane " , " Promedio " : 17 ," Alto" : 45 , " DtmStamp " : 1358226000000 }, 
    { " nombre " : " John " , " Promedio " : 18 , " Alto " : 87 , " DtmStamp " : 1358226000000 }, 
    { " nombre " : " Jane " , " Promedio " : 15 , "Alto ": 10 , " DtmStamp " : 1358226060000 }, 
    { " nombre " : " John " , " Promedio " : 16 , " Alto " : 87 , " DtmStamp " : 1358226060000 }, 
    { " nombre " : " John " , " Promedio " : 17 , "Alto " :45 , " DtmStamp " : 1358226060000 }, 
    { " nombre " : " Jane " , " Promedio " : 18 , " Alto " : 92 , " DtmStamp " : 1358226060000 } 
]; 
 
let sorted = groupBy (list, function (item) {
     return [item.name]; 
}); 
console.log (ordenado);
  1. La función groupBy tiene dos parámetros formales, uno es la matriz de objetos y el otro es la función anónima (la función de la función: devolver el valor de atributo de un atributo especificado del objeto y almacenarlo en la matriz);
  2. Dentro de la función groupBy, cree primero un objeto vacío;
  3. Luego, para cada uno atraviesa el conjunto de objetos, solo hay un parámetro formal o (cada elemento en el conjunto) en la función que se ejecutará durante el recorrido;
  4. Debido a que la siguiente llamada de función es agrupar por nombre, deje que group = JSON.stringify (f (o)), que es equivalente a obtener primero el valor del atributo correspondiente al atributo de nombre en la lista de la matriz de objetos y ponerlo en la matriz: ["John "], Y luego convierte el valor del atributo en una cadena json: '[" John "]';
  5. grupos [grupo] = grupos [grupo] || [], el objeto también es una matriz asociativa en js, por lo que aquí es equivalente a hacer dos cosas, una es usar el grupo como la clave de los grupos, y el otro es inicializar el valor correspondiente, el primero Una matriz vacía se ejecuta una vez y permanece sin cambios cuando se encuentra el mismo nombre durante la ejecución del bucle;
  6. groups [group] .push (o), esta oración es equivalente a presionar cada objeto de la lista en la matriz como valor;
  7. Finalmente, Object.keys (grupos) saca todas las claves en el objeto de grupos, y luego atraviesa la nueva matriz de claves, y devuelve la matriz bidimensional de los grupos divididos, y ya está listo ~~~

 

[[{nombre: ' John ' , Promedio: 15 , Alto: 10 , DtmStamp: 1358226000000 }, 
    {nombre: ' John ' , Promedio: 18 , Alto: 87 , DtmStamp: 1358226000000 }, 
    {nombre: ' John ' , Promedio : 16 , alto: 87 , DtmStamp: 1358226060000 }, 
    {nombre: ' John ' , promedio: 17 , alto: 45 , DtmStamp: 1358226060000 }],
  [{nombre: ' Jane ' , promedio: 16 , alto: 92 , DtmStamp: 1358226000000 }, 
    {nombre: ' Jane ' , promedio: 17 , alto: 45 , DtmStamp: 1358226000000 }, 
    {nombre: ' Jane ' , promedio: 15 , alto: 10 , DtmStamp: 1358226060000 }, 
    {nombre: ' Jane ' , promedio: 18 , alto: 92 , DtmStamp: 1358226060000 }]]

 

Supongo que te gusta

Origin www.cnblogs.com/aidixie/p/12741193.html
Recomendado
Clasificación