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

162
Visualizações
how to add key value pair for same key in same object in array of object?

this is my array of object.

const arr = [{"company":"Google","product":"A","sell":34},{"company":"Google","product":"B","sell":31},{"company":"Google","product":"C","sell":64},{"company":"Twitter","product":"A","sell":34},{"company":"Twitter","product":"B","sell":56},{"company":"Twitter","product":"C","sell":48}]

solution which i have tried.

const result = arr.reduce((acc, d) => {
       const found = acc.find(a => a.name === d.name);
            if (!found) {
                acc.push({ name: d.name, [d.value]: d.count })
            }
            else {
                found.push({ [d.value]: d.count });
            }
            return acc;
        }, []);
console.log(result)

expected output should be like below but something wrong in else block

[{ company: "Google", A: 34, B:31, C:64 },{ company: "Twitter", A: 34, B:56, C:48 }] 
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

You have property names wrong all over your code.

And yes, the else block should just create a new property found[d.product] = d.sell;

const arr = [{
  "company": "Google",
  "product": "A",
  "sell": 34
}, {
  "company": "Google",
  "product": "B",
  "sell": 31
}, {
  "company": "Google",
  "product": "C",
  "sell": 64
}, {
  "company": "Twitter",
  "product": "A",
  "sell": 34
}, {
  "company": "Twitter",
  "product": "B",
  "sell": 56
}, {
  "company": "Twitter",
  "product": "C",
  "sell": 48
}]

const result = arr.reduce((acc, d) => {
  const found = acc.find(a => a.name === d.company);
  if (!found) {
    acc.push({
      name: d.company,
      [d.product]: d.sell
    })
  } else {
    found[d.product] = d.sell;
  }
  return acc;
}, []);
console.log(result)

Other than that current algorithm is O(n^2) if you want it to be linear you could use Map to store data to avoid O(n) lookups

const arr = [{
  "company": "Google",
  "product": "A",
  "sell": 34
}, {
  "company": "Google",
  "product": "B",
  "sell": 31
}, {
  "company": "Google",
  "product": "C",
  "sell": 64
}, {
  "company": "Twitter",
  "product": "A",
  "sell": 34
}, {
  "company": "Twitter",
  "product": "B",
  "sell": 56
}, {
  "company": "Twitter",
  "product": "C",
  "sell": 48
}]

const result = [...arr.reduce((acc, d) => {
  const found = acc.get(d.company); // O(1) lookup

  if (found) {
    found[d.product] = d.sell
  } else {
    acc.set(d.company, {
      name: d.company,
      [d.product]: d.sell
    })
  }

  return acc
}, new Map).values()];
console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

const arr = [{ "company": "Google", "product": "A", "sell": 34 }, { "company": "Google", "product": "B", "sell": 31 }, { "company": "Google", "product": "C", "sell": 64 }, { "company": "Twitter", "product": "A", "sell": 34 }, { "company": "Twitter", "product": "B", "sell": 56 }, { "company": "Twitter", "product": "C", "sell": 48 }]

const res = []

arr.forEach(function (item) {
  const idxExist = res.findIndex(el => el.company === item.company)
  if (idxExist === -1) {
    res.push({"company": item['company'], [item['product']]: item['sell']})
  } else {
    res[idxExist][item['product']] = item['sell']
  }
})

console.log(res)

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