Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

101
Visualizações
Group array of objects into 2D arrays based on nested value

I have an array of objects like this

array1 = [{data: ..., name: a}, {data: ..., name: b}, {data: ..., name: a}, {data: ..., name: c}, {data: ..., name: c}, {data: ..., name: b}]

I want to sort it in such a way that it groups them by name in sub-arrays

array2 = [
  [{data: ..., name: a}, {data: ..., name: a}, {data: ..., name: a}],
  [{data: ..., name: b}, {data: ..., name: b}],
  [{data: ..., name: c}]
]

I don't always know what the name will be, so I can not manually do 'if name === 'a' etc.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

You can use Array.reduce() here to group your data by name. We create an object with a property for each name present, appending any matching value to an array at this value. We'd then used Object.values() to create our desired array.

array1 = [{data: {}, name: 'a' }, {data: {}, name: 'b'}, {data: {}, name: 'a'}, {data: {}, name: 'c'}, {data: {}, name: 'c'}, {data: {}, name: 'b'}];

const grouped = Object.values(array1.reduce((acc, cur) => { 
    acc[cur.name] = [...(acc[cur.name] || []), cur];
    return acc;
}, {}));

console.log('Grouped:', grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Please try the below code

let objMap = {};
array1.map(arr=>{
 if(!objMap[arr.name]){
  objMap[arr.name]=[]
 }
 objMap[arr.name].push(arr)
})
console.log(Object.values(objMap));

about 4 years ago · Juan Pablo Isaza Relatório

0

Actually this is grouping not sorting.

This can be done with a looping technique. I use Array.reduce here

const array1 = [{ data: 'some value', name: 'a' }, { data: 'some value', name: 'b' }, { data: 'some value', name: 'a' }, { data: 'some value', name: 'c' }, { data: 'some value', name: 'c' }, { data: 'some value', name: 'b' }];
const array2 = array1.reduce((acc, curr) => {
  const node = acc.find(item => item.find(subItem => subItem.name === curr.name));
  if(node) {
    node.push(curr)
  } else {
    acc.push([curr])
  }
  return acc;
}, []);
console.log(array2);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda