How to check an attribute of type object in Javascript?

7

I get the following object:

obj = {
    fernando: {
        nome: 'Fernando',
        idade: 21
    },
    tiago: {
        nome: 'tiago',
        idade: NaN
    },
    total: 2
}

As you can see, I get an object where each attribute can be another object, and can also be an integer type attribute.

How do I check each "person" .ity is Number ????

EDIT: I need to check "N" values (people), not just a specific ...

    
asked by anonymous 21.12.2016 / 19:36

2 answers

5

To access the properties of an object you can do it in two ways:

var obj = {
    fernando: {
        nome: 'Fernando',
        idade: 21
    },
    tiago: {
        nome: 'tiago',
        idade: NaN
    },
    total: 2
};

console.log(obj.tiago.nome); // dá tiago
console.log(obj['tiago']['nome']); // dá tiago

Both work, but the first one is most often used when you know the property name beforehand.

To know the type of the variable / property you can use typeof :

console.log(typeof 0); // number
console.log(typeof 4); // number
console.log(typeof NaN); // number
console.log(typeof 'texto'); // string

Adding object methods you can find what you need:

var obj = {
    fernando: {
        nome: 'Fernando',
        idade: 21
    },
    tiago: {
        nome: 'tiago',
        idade: NaN
    },
    total: 2
};

// quantos têm idade válida
var nrValidos = Object.keys(obj).filter(nome => obj[nome].idade).length;
console.log(nrValidos); // 1

// quantas pessoas têm a propriedade idade
var nrEntradas = Object.keys(obj).filter(nome => obj[nome].hasOwnProperty('idade')).length;
console.log(nrEntradas); // 2

// quais as pessoas que têm a propriedade idade válida
var nomes = Object.keys(obj).filter(nome => obj[nome].idade);
console.log(nomes); // ["fernando"]

If you check only obj[nome].idade gives false to NaN and 0 . If you want to distinguish them, you can use isNaN . isNaN(NaN) //dá true

    
21.12.2016 / 19:54
5

You can iterate the object keys using Object.keys and check if it's a number using isNaN :

var obj = {
  fernando: {
    nome: 'Fernando',
    idade: 21
  },
  tiago: {
    nome: 'tiago',
    idade: NaN
  },
  lucas: {
    nome: 'Lucas',
    idade: 23
  },
  total: 2
};

Object.keys(obj).forEach(function(key) {
  if (!isNaN(obj[key].idade))
      console.log(obj[key].nome + " possui idade");
});
    
21.12.2016 / 19:43