dopatraman
dopatraman

Reputation: 13908

how to make function return more than one value

This is my code:

var Evalcard =  function(number) {
    if (number == 1) {
        this.name = "Ace";
        this.value = 11;
    }
    else if (number == 11) {
        this.name = "Jack";
        this.value = 10;
    }
    else if (number == 12) {
        this.name = "Queen";
        this.value = 10;
    }
    else if (number == 13) {
        this.name = "King";
        this.value = 10;
    }

    return {this.name,this.value};

I'm pretty sure this return statement is not correct. How do you make a function return more than one value? Any help at all would be great.

Upvotes: 2

Views: 4592

Answers (9)

Robert
Robert

Reputation: 8767

Working example: http://jsfiddle.net/CxTWt/

var Evalcard = function(number) {
    var evalName, evalValue;    
    if (number == 1) {         
        evalName= "Ace";         
        evalValue = 11;     
    }else if (number == 11) {         
        evalName = "Jack";         
        evalValue = 10;     
    }else if (number == 12) {         
        evalName= "Queen";         
        evalValue= 10;     
    }else if (number == 13) {         
        evalName= "King";         
        evalValue = 10;     
    }      
    return {name: evalName, value: evalValue};
}

alert(Evalcard(1).name+" "+Evalcard(1).value);

Upvotes: 1

Manikandan Thangaraj
Manikandan Thangaraj

Reputation: 1594

Try this...

function xyz() {
...
var x = 1;
var y = 'A';
return [x, y];
}
var a = xyz();
document.write('x=' + a[0] + ' and y = ' + a[1]); 

Upvotes: 1

Nick Husher
Nick Husher

Reputation: 1884

In this case, you probably want to return either an array or an object literal:

return { name: this.name, value: this.value };
// later: EvalCard(...).name; EvalCard(...).number;


return [ this.name, this.value ];
// later: EvalCard(...)[0]; EvalCard(...)[1];

Upvotes: 6

Griffin
Griffin

Reputation: 14634

You can return it in a number of different ways:

Array

return [this.name,this.value];

Object

return {first:this.name, second:this.value};

String

return this.name+":"+this.value;

Upvotes: 0

Dan Short
Dan Short

Reputation: 9616

I would return an object:

return {key1:value1, key2:value2}

Then you can reference it like so:

myReturn.key1;

Upvotes: 0

zzzzBov
zzzzBov

Reputation: 179046

You could pass an object literal as you came so close to doing:

return { name:this.name, value:this.value };

or you could pass an array:

return [this.name, this.value];

Of course if your code is executed in the global context, you'll be setting name and value on the window object. If you're using Evalcard as a constructor, you wont need a return statement, the object being created will automatically be set:

var e = new Evalcard(1);
console.log(e.name); //outputs "Ace" if you remove the return statement.

Upvotes: 2

austinbv
austinbv

Reputation: 9491

You need to change it to return an array or give keys to the object you are returning

So

return [this.name,this.value];

Or

return {name:this.name,value:this.value};

Upvotes: 0

Gabriel Ross
Gabriel Ross

Reputation: 5198

Try:

return [this.name, this.value];

Upvotes: 1

helpermethod
helpermethod

Reputation: 62165

How about this:

return [this.name, this.value];

Upvotes: 2

Related Questions