Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
How to interate through array in groupped object by key?

In the given array I'm groupping by property called Value and the result is an object where key is the Value and value are matching arrays. Now I'm trying to loop and output all the data by key.
So desired output would be to display all objects by it's key. Smth like in the screenshot below, only in my case data is groupped by Value.

enter image description here

Here is the code and sandbox link

import "./styles.css";
import { groupBy } from "lodash";

const data = [
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "20" }
];
export default function App() {
  const grouppedByValue = groupBy(data, "Value");
  console.log(grouppedByValue);
  console.log(Object.keys(grouppedByValue));
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Until you edit the post, I will assume that you're trying to map over each key of the grouppedByValue object, and then iterate the array of each grouppedByValue[key].

This is an example:

      {Object.entries(grouppedByValue).map(([key, value], kidx) => (
        <div key={`k-${kidx}`}>
          {value.map((el, idx) => (
            <span key={`el-${idx}`}>{JSON.stringify(el)}</span>
          ))}
        </div>
      ))}

Note that I'm using kidx and idx to give children the necessary keys as requested by React.

This example outputs the whole object, but feel free to extract the necessary information from it.

If you are not familiar with Object.entries(), check out this documentation from MDN.

This is the full implementation based on your sample.

import "./styles.css";
import { groupBy } from "lodash";

const data = [
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "20" }
];
export default function App() {
  const grouppedByValue = groupBy(data, "Value");
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      {Object.entries(grouppedByValue).map(([key, value], kidx) => (
        <div key={`k-${kidx}`}>
          {value.map((el, idx) => (
            <span key={`el-${idx}`}>{JSON.stringify(el)}</span>
          ))}
        </div>
      ))}
    </div>
  );
}

Output image

about 4 years ago · Juan Pablo Isaza Denunciar

0

you can use Object.entries for that in this way

import "./styles.css";
import { groupBy } from "lodash";

const data = [
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "20" }
];
export default function App() {
  const grouppedByValue = groupBy(data, "Value");
  console.log(grouppedByValue);
  console.log(Object.keys(grouppedByValue));
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      {Object.entries(grouppedByValue).map(([value, items]) => <div key={value}>
  <div>{value}</div>
   <ul>
     {items.map((item, i) => <li key={i}>Phase :{item.Phase} </li>)
   </ul>
</div>)
    </div>
  );
}



about 4 years ago · Juan Pablo Isaza Denunciar

0

You can use Object.entries to get both key and value at same time.

DOM structure to make similar to OP's screenshot.

import "./styles.css";
import { groupBy } from "lodash";

const data = [
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "20" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "5" },
  { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "20" }
];
export default function App() {
  const grouppedByValue = groupBy(data, "Value");
  console.log(grouppedByValue);
  console.log(Object.keys(grouppedByValue));
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      {Object.entries(grouppedByValue).map(([key, value]) => (
        <div>
          <div><strong>{key}</strong></div>
          {value.map((el) => (
            <div>{el.Phase}, {el.Step}, {el.Task}</div>
          ))}
        </div> 
      ))}
    </div>
  );
}

enter image description here

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda