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

173
Vistas
Javascript modify array of objects and concat value

I have an array of objects like this:

const data = [
  { id: '1', label: 'Last Name', value: 'Smith' },
  { id: '1', label: 'Last Name', value: 'Blogs' },
  { id: '2', label: 'First Name', value: 'John' },
  { id: '2', label: 'First Name', value: 'Joe' }
];

I'm trying to get an output like this:

const output = [
  {key: 'Employee', value: 'John Smith'},
  {key: 'Employee', value: 'Joe Blogs'}
];

I was looking at using reduce, but am stuck on how to properly get a condition to say that if id is 2, then add to output.value, and if id is 1 then concat output.value to the value already there.

Both id 1 and id 2 are dynamic and can grow. Id 1 will always be last name and id 2 will always be first name.

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

0

  • .reduce() groups each ['value'] under ['label']['First Name'] or ['label']['Last Name'] which become arrays of group object.

  • Next .map() iterates through output['First Name'] and then current values of output['First Name'] and output['Last Name'] are concatenated and added to a new object created by Object.assign()

const data = [
  { id: '1', label: 'Last Name', value: 'Smith' },
  { id: '1', label: 'Last Name', value: 'Blogs' },
  { id: '2', label: 'First Name', value: 'John' },
  { id: '2', label: 'First Name', value: 'Joe' }
];

function fullName(objArray) {
  let output = objArray.reduce((group, current) => {
    if (!group[current['label']]) {
      group[current['label']] = [];
    }
    group[current['label']].push(current.value);
    return group
  }, {});
  
  console.log(`.reduce() returns: (scroll down for final result)`);
  console.log(output);
  console.log(`fullName(data) returns:`);
  
  return output['First Name'].map((first, index) =>
    Object.assign({}, {
      key: 'Employee',
      value: first + ' ' + output['Last Name'][index]
    })
  );
}

console.log(fullName(data));

about 4 years ago · Juan Pablo Isaza Denunciar

0

You need to first group the related items. These days you can use the Map object but normally most people would simply use an empty object ({}) partly because that's how it's always been done so other programmers can easily read your code and partly because the syntax is nicer to use.

So the basic idea would be this:

let group = {};

arrayData.forEach(item => {
    let id = item.id;

    if (!group[id]) {
        // if item does not exist in the group yet
        // then create item
        group[id] = {}
    }

    group[id][item.some_key] = item.some_value;
})

Then after grouping you can loop through the group and construct a new array:

let result = [];

for (let i in group) {
    result.push({
        some_key_you_want: i.xxx + i.yyy
    })
}

Now you have a result array containing the data you want. Of course we can write this in many different ways but the above is the general outline of the idea.

In your case we can do:

let group = {}

data.forEach(item => {
    let id = item.id;
    if (!group[id]) group[id] = {};
    group[id][item.label] = item.value;
})

const result = Object.values(group).map(item => {
    return {
        key: 'Employee',
        value: item['First Name'] + ' ' + item['Last Name'],
    }
})
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