Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!