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

128
Visualizações
Get array length and push into each object

I have a function

const output = {}
sites.forEach(obj=>{
    const ids = obj.ids
    if(ids && ids.length>0){
        ids.forEach(id=>{
            if(!output[id]){
                output[id] = []
            }
            output[id].push(obj.url);
        });
    }
});

fs.writeFileSync('cleanedData.json', JSON.stringify(output));

that takes data such as:

{ 
     url: "www.site.com", 
     ids: ["F20", "C10", "C05"] 
}, 
{ 
    url: "www.site.com/something", 
    ids: ["F20", "C05", "C10"] 
}, 
{ 
    url: "www.site.com/somethingelse", 
    ids: ["F20", "C12", "C05"] 
}

and transforms it so that I have a list of all ids and all urls with that id:

{
  "F20": [
    "www.site.com",
    "www.site.com/something",
    "www.site.com/somethingelse"
  ]
}, {
  "C10": [
    "www.site.com",
    "www.site.com/something"
  ]
}, {
  "C12": [
    "www.site.com/somethingelse"
  ]
}, {
  "C05": [
    "www.site.com",
    "www.site.com/something",
    "www.site.com/somethingelse"
  ]
}

I'm able to get a count of each id's array length with

console.log(Object.values(output).map(id => id.length))

But can't figure out how to include that as part of the forEach, so that I have a key/value in each object that shows the length of the array.

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

0

Use nested objects in the output, and give it a length property that you increment when you push onto the array.

const sites = [{
    url: "www.site.com",
    ids: ["F20", "C10", "C05"]
  },
  {
    url: "www.site.com/something",
    ids: ["F20", "C05", "C10"]
  },
  {
    url: "www.site.com/somethingelse",
    ids: ["F20", "C12", "C05"]
  }
];

const output = {};
sites.forEach(obj => {
  const ids = obj.ids
  if (ids && ids.length > 0) {
    ids.forEach(id => {
      if (!output[id]) {
        output[id] = {length: 0, urls: []}
      }
      output[id].urls.push(obj.url);
      output[id].length++;
    });
  }
});

console.log(output);

about 4 years ago · Juan Pablo Isaza Relatório

0

You can use Array.prototype.reduce() combined with Array.prototype.forEach():

const sites = [{url: "www.site.com",ids: ["F20", "C10", "C05"]},{url: "www.site.com/something",ids: ["F20", "C05", "C10"]},{url: "www.site.com/somethingelse",ids: ["F20", "C12", "C05"]}]

const output = sites.reduce((a, { url, ids }) => {
  ids.forEach(id => {
    a[id] = a[id] || { length: 0, urls: [] }
    a[id].length += 1
    a[id].urls.push(url)
  })
  return a
}, {})

console.log(output)

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