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

107
Views
Change structure of JavaScript array

I am a beginner in javascript and i have a little problem. i want to change the structure of array for rendering in React Native using section List,

I got this JSON from Web Api

[
  {
    title: "Test",
    c: 1,
    d: 2,
  },
  {
    title: "Test",
    c: 3,
    d: 4,
  },
  {
    title: "Test",
    c: 5,
    d: 6,
  },
  {
    title: "Test01",
    c: 1,
    d: 2,
  },
  {
    title: "Test01",
    c: 3,
    d: 4,
  },
  {
    title: "Test01",
    c: 5,
    d: 6,
  },
  {
    title: "Test02",
    c: 1,
    d: 2,
  },
  {
    title: "Test02",
    c: 3,
    d: 4,
  },
  {
    title: "Test02",
    c: 5,
    d: 6,
  },
];

And I want to change this JSON like this

[
  {
    title: "Test",
    data: [
      { c: 1, d: 2 },
      { c: 3, d: 4 },
      { c: 5, d: 6 },
    ],
  },
  {
    title: "Test01",
    data: [
      { c: 1, d: 2 },
      { c: 3, d: 4 },
      { c: 5, d: 6 },
    ],
  },
  {
    title: "Test02",
    data: [
      { c: 1, d: 2 },
      { c: 3, d: 4 },
      { c: 5, d: 6 },
    ],
  },
];
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

It would be simpler to key your data to the test name, but you can achieve what you want by mapping your array like this:

let new_array=[];
your_array.forEach(elem => {
  let title = elem.title;
  let matchingIndex = newArray.findIndex(a => a.title = title);
  if (matchingIndex === -1) {
    new_array.push({title}
    matchingIndex = new_array.length - 1;
  }
let dataColumns = ['c', 'd'];
let data = {};
dataColumns.forEach(col => {
 data[col] = elem[col];
});
if (!Array.isArray(new_array[matching_index].data)) {
  isArray(new_array[matching_index].data = [];
}
new_array[matching_index].data.push(data);
});

about 4 years ago · Juan Pablo Isaza Report

0

You can perform reduce operation in the array and get the desired format.

const items = [
  {
    title: "Test",
    c: 1,
    d: 2,
  },
  {
    title: "Test",
    c: 3,
    d: 4,
  },
  {
    title: "Test",
    c: 5,
    d: 6,
  },
  {
    title: "Test01",
    c: 1,
    d: 2,
  },
  {
    title: "Test01",
    c: 3,
    d: 4,
  },
  {
    title: "Test01",
    c: 5,
    d: 6,
  },
  {
    title: "Test02",
    c: 1,
    d: 2,
  },
  {
    title: "Test02",
    c: 3,
    d: 4,
  },
  {
    title: "Test02",
    c: 5,
    d: 6,
  },
];

const formatted = items.reduce((carry, current) => {
    // generating the placeholder format to put the data 
    if(!carry.hasOwnProperty(current.title)) {
      carry[current.title] = {
        title: current.title,
        data: []
      };
    }
    // Setting the data in unique name
    carry[current.title].data.push({ c: current.c, d: current.d });
    return carry;
}, []);
// formatted will have key value pair
console.log(Object.values(formatted));

about 4 years ago · Juan Pablo Isaza Report

0

A reduce function to accumulate the result in an array:

const raw = [{
    title: 'Test',
    c: 1,
    d: 2,
  },
  {
    title: 'Test',
    c: 3,
    d: 4,
  },
  {
    title: 'Test',
    c: 5,
    d: 6,
  },
  {
    title: 'Test01',
    c: 1,
    d: 2,
  },
  {
    title: 'Test01',
    c: 3,
    d: 4,
  },
  {
    title: 'Test01',
    c: 5,
    d: 6,
  },
  {
    title: 'Test02',
    c: 1,
    d: 2,
  },
  {
    title: 'Test02',
    c: 3,
    d: 4,
  },
  {
    title: 'Test02',
    c: 5,
    d: 6,
  },
];

const result = raw.reduce((acc, {
  title,
  ...data
}) => {
  const index = acc.findIndex((elem) => title === elem.title);
  if (index === -1) acc.push({
    title,
    data: [data]
  });
  else acc[index].data.push(data);
  return acc;
}, []);
console.log(result);

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!