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

96
Vistas
[Javascript]: Merge two arrays of object that has string & array values
const FirstData = [
  {
    title: 'Title 1',
    data: ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'],
  },
  {
    title: 'Title 2',
    data: ['a', 'b', 'c'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello2', 'hello3', 'hello4', 'hello5'],
  },
];

SecondData's data is shuffled behind the scene

const SecondData = [
  {
    title: 'Title 1',
    data: ['foo3', 'foo1', 'foo2'],
  },
  {
    title: 'Title 2',
    data: ['b', 'c', 'a'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello3', 'hello2'],
  },
];

EXPECTED OUTPUT (Must be similar to SecondData but the new strings from FirstData's data must be pushed, added or merged):

[
  {
    title: 'Title 1',
    data: ['foo3', 'foo1', 'foo2', 'foo4', 'foo5'],
  },
  {
    title: 'Title 2',
    data: ['b', 'c', 'a'],
  },
  {
    title: 'Title 3',
    data: ['hello1', 'hello3', 'hello2', 'hello4', 'hello5'],
  },
];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

You could create a map that indexes based on title and then use Set to make sure that you don't add duplicates. Something like this:

const items = {}

firstData.forEach(item => {
 items[item.title] = new Set([...item.data)]
})

secondData.forEach(item => {
 const existingItem = items[item.title]

 if(!existingItem) {
  items[item.title] = new Set([...item.data)]
 } else {
  items[item.title] = new Set([...existingItem, ...item.data])
 }
})

const merged = Object.keys(items).map(title => ({
  title: key,
  data: [...items[key]]
 })
)

about 4 years ago · Juan Pablo Isaza Denunciar

0

I would suggest concatenating the arrays, then using Array.reduce() to group the values by title.

For each entry, we merge the data array using a Set, which will discard any duplicate values in this array.

const FirstData = [ { title: 'Title 1', data: ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'], }, { title: 'Title 2', data: ['a', 'b', 'c'], }, { title: 'Title 3', data: ['hello1', 'hello2', 'hello3', 'hello4', 'hello5'], }, ];

const SecondData = [ { title: 'Title 1', data: ['foo3', 'foo1', 'foo2'], }, { title: 'Title 2', data: ['b', 'c', 'a'], }, { title: 'Title 3', data: ['hello1', 'hello3', 'hello2'], }, ];

// Concatenate our data to get input...    
const input = FirstData.concat(SecondData);

// Group each item by title. 
// For each item, merge the data array using a Set object
const result = Object.values(input.reduce((acc, { title, data }) => { 
    acc[title] = acc[title] || { title, data: [] };
    acc[title].data = [...new Set([...acc[title].data, ...data])];
    return acc;
}, {}));

console.log('Result:', result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

You could take a Set and filter the given array from random values.

const
    merge = (a, b) => [
        ...a,
        ...b.filter((s => v => !s.has(v))(new Set(a)))
    ],
    given = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5'],
    random = ['foo3', 'foo1', 'foo2'],
    result = merge(random, given);

console.log(...result);

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