Jetson John
Jetson John

Reputation: 3829

Javascript function always returns null

I am newbie to the JavaScript world. I have a doubt how the return statement works in JavaScript.

What I am trying to do is to have a function pass one arguments param and looking whether the param match the key of the exampleData object. If match found I want to return the value and break the looping of each function also break the function I don't want to execute any other statement under the each function. If no match found the function must return null. But currently the function always return null value.

function exampleFunction(param){
    $.each(exampleData, function (key, value) {
        if(key == param){
        return value;
        }
    });
    return null;
}

Any insight into this would highly be appreciated. Thank you.

Upvotes: 3

Views: 14185

Answers (4)

Douglas Barbin
Douglas Barbin

Reputation: 3615

Try this:

function exampleFunction(param){ 
    return exampleData[param];
  }

EDIT: If you want to return null if the parameter is undefined, then take a look at Paul and Crazy Train's comments:

return (typeof exampleData[param] === 'undefined')? null: exampleData[param]; 

OR

return (param in exampleData) ? exampleData[param] : null;

Upvotes: 0

user1207456
user1207456

Reputation:

There are a few issues with your approach:

  1. The inner function you defined is returning to $.each, not to the outer function, so you never get that value.
  2. You don't need to iterate over the object in the wild way you are. Objects in Javascript are hash tables, you can simply do the following

:

function exampleFunction(param) {
    return exampleData[param];
}

If exampleData[param] is undefined, it will return undefined, otherwise, it will return the value stored there.

If you absolutely need the undefined case to return null instead of undefined, then it becomes a bit more complicated.

function exampleFunction(param) {
    if(exampleData.hasOwnProperty(param) {
        return exampleData[param];
    } else {
        return null;
    }
}

Upvotes: 0

canon
canon

Reputation: 41665

Your example doesn't seem to need a loop. That and returning from the loop-delegate doesn't do anything for you.

You can test if a key appears in an object using the in operator.

function exampleFunction(param){
  return param in exampleData ? exampleData[param] : null;
}

Upvotes: 8

Cᴏʀʏ
Cᴏʀʏ

Reputation: 107508

Given Crazy Train's comment, you need to capture the matching value so you can return it later:

function exampleFunction(param) {
    var match = null;
    $.each(exampleData, function (key, value) {
        if (key == param) {
            match = value;
            return false; // to end the $.each early
        }
    });
    return match;
}

Upvotes: 4

Related Questions