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

273
Visualizações
Why am I getting NaN and How do I get the expected output?

I'm a JS newbie. I want to keep track of number of duplicate objects in an array, in another object, so I decided to write a function. For example: consider the below object.

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

I want to keep track of number of duplicate object in the above array, so I wrote the below function.

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    duplicates[`${i.name}`] !== "undefined"
      ? (duplicates[`${i.name}`] += 1)
      : (duplicates[`${i.name}`] = 1);
  }
  return duplicates;
}

The output I'm getting is:

{orange: NaN, apple: NaN, banana: NaN}

(Expected output) The output which I want is:

{orange: 2, apple: 1, banana: 1}

How do I get the expected output? what mistake am I doing?

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

0

Your error is testing against "undefined" (the word) instead of undefined (an undefined value) :

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    duplicates[i.name] !== undefined
      ? (duplicates[i.name] += 1)
      : (duplicates[i.name] = 1);
  }
  return duplicates;
}

console.log( calcDuplicates(fruits) );

about 4 years ago · Juan Pablo Isaza Relatório

0

Instead of string "undefined" use the primitive value undefined in the condition:

duplicates[`${i.name}`] !== undefined

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    duplicates[`${i.name}`] !== undefined
      ? (duplicates[`${i.name}`] += 1)
      : (duplicates[`${i.name}`] = 1);
  }
  return duplicates;
}
console.log(calcDuplicates(fruits))

about 4 years ago · Juan Pablo Isaza Relatório

0

It's because your condition should be tested against undefined, not a string containing 'undefined'.

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    duplicates[`${i.name}`] !== undefined
      ? (duplicates[`${i.name}`] += 1)
      : (duplicates[`${i.name}`] = 1);
  }
  return duplicates;
}

console.log( calcDuplicates(fruits) );

And this is how I'd write it:

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    duplicates[i.name] = (duplicates[i.name] || 0) + 1
  }
  return duplicates;
}

console.log( calcDuplicates(fruits) );

Pretty much same thing, using reduce and a destructuring map:

const fruits = [{name: 'orange'}, {name: 'orange'}, {name: 'apple'}, {name: 'banana'}];

const calcDuplicates = o => o
  .map(({ name }) => name)
  .reduce((a, b) => ({ ...a, [b]: (a[b] || 0) + 1 }), {})

console.log( calcDuplicates(fruits) );

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