compilererror
compilererror

Reputation: 25

Adding object properties in JavaScript

I am trying to subtract the value of object1's objectProperty from object2's object property and I keep getting NaN on the console. Here is example code:

    object1.objectProperty - object2.object2Property

If this isn't enough to go off, I can post the full code from my project. If there is another way to do this or some kind of function that can help, please let me know.

edit: Here is the code..

    var myPokemon = {
    health: 25,
    defense: 5,
    attack: 10,
    speed: 5
};

var moves = {
    Scratch: 5,
    Bite: 5,
    Slap: 5,
    Growl: 1
};


var computerPokemon = {
    health: 20,
    defense: 5,
    attack: 10, 
    speed: 7
};

function calcDamage(firstPokemon, secondPokemon, move) {
    if(move == moves.Growl){
        //starts here
        var newDefense =  moves.Growl - firstPokemon.defense;
        console.log(newDefense);
        //ends here
    }else{
    var newHealth = (firstPokemon.health + firstPokemon.defense) - (secondPokemon.attack + move);
    console.log(newHealth);
    }
}

edit: When I did moves.Growl - firstPokemon.defense || 0; it returned -4 instead of NaN which is what I wanted it to do, but the person that answered that removed the answer so this has been answered by whoever that guy was.

Upvotes: 2

Views: 73

Answers (3)

Rajshekar Reddy
Rajshekar Reddy

Reputation: 18987

Use parseInt to convert the values into integer and then do the math.

 var value = parseInt(object1.objectProperty,10) - parseInt(object2.object2Property,10);

The Problem is here

var newHealth = (Number(firstPokemon.health) + Number(firstPokemon.defense)) - (Number(secondPokemon.attack) + Number(move.Growl));

The last one Number(move.Growl) it should be Number(moves.Growl) moves not move. In your case move is just a number and you are trying Number(move.Growl) which will be NaN and hence your getting NaN.

Upvotes: 0

Metabolic
Metabolic

Reputation: 2904

The problem is that you are adding the object in the second argument. Also your if statement will never execute, I have fixed both as following

        var myPokemon = {
    	health: 25,
    	defense: 5,
    	attack: 10,
    	speed: 5
    };
    
    var moves = {
    	Scratch: 5,
    	Bite: 5,
    	Slap: 5,
    	Growl: 1
    };
    
    
    var computerPokemon = {
    	health: 20,
    	defense: 5,
    	attack: 10, 
    	speed: 7
    };
    
    function calcDamage(firstPokemon, secondPokemon, move) {
    	if(moves.Growl!=undefined){
            //starts here
    		var newDefense =  moves.Growl - firstPokemon.defense;
    		alert(newDefense);
            //ends here
    	}else{
    	var newHealth = (Number(firstPokemon.health) + Number(firstPokemon.defense)) - (Number(secondPokemon.attack) + Number(move.Growl));
    	alert(newHealth);
        }
    }

calcDamage(myPokemon,computerPokemon,moves)

Upvotes: 1

lucasmonteiro001
lucasmonteiro001

Reputation: 83

Usually, if you are getting NaN, you are probably working with other elements but numbers. Are you sure they both are numbers?

Just an example:

var x = {}, y = {};
x.r = 10;
y.r = 5;
x.r - y.r; // yields 5

Upvotes: 1

Related Questions