Jeya Suriya Muthumari
Jeya Suriya Muthumari

Reputation: 2021

js: Multiple return in Ternary Operator

For my task, I have a done a piece of code like to fetch the user details,

var data = userInfo.map(function (element) {
    if (element[9].search("Active") != -1) {
        return {
            'LastName': Capitalizefirstletter(element[1]),
            'FirstName': Capitalizefirstletter(element[2]),
            'UserName': element[3],
            'IsActiveUser': "True"
        };
    }
    else {
        return {
            'LastName': Capitalizefirstletter(element[1]),
            'FirstName': Capitalizefirstletter(element[2]),
            'UserName': element[3],
            'IsActiveUser': "False"
        };
    }
}

which is working properly and i can see all the details of all the user in variable data.

While re factoring, I was asked to implement this using Ternary Operator(No guess why I have to change like this,though that one works fine). So I tried like this, code executed but only NULL value I can see in variable data.

var data = userInfo.map(function (element) {
    (element[9].search("Active")) != -1  ? {
        'LastName': Capitalizefirstletter(element[1]),
        'FirstName': Capitalizefirstletter(element[2]),
        'UserName': element[3],
        'IsActiveUser': "True"
    } : {
        'LastName': Capitalizefirstletter(element[1]),
        'FirstName': Capitalizefirstletter(element[2]),
        'UserName': element[3],
        'IsActiveUser': "False"
    };
}

Can anyone help me on this?

Thanks in Advance

Upvotes: 1

Views: 1665

Answers (2)

Nina Scholz
Nina Scholz

Reputation: 386560

Since the difference is only one property (IsActiveUser), you can insert the comparison inside the object.

var data = userInfo.map(function (element) {
    return {
        'LastName': Capitalizefirstletter(element[1]),
        'FirstName': Capitalizefirstletter(element[2]),
        'UserName': element[3],
        'IsActiveUser': ~element[9].search("Active") ? "True": "False" // really a string?
    };
});

Upvotes: 4

cl3m
cl3m

Reputation: 2801

Your map function needs to return something on each iteration. Just add the return keyword:

var data = userInfo.map(function (element) {
    return (element[9].search("Active")) != -1  ? {
        'LastName': Capitalizefirstletter(element[1]),
        'FirstName': Capitalizefirstletter(element[2]),
        'UserName': element[3],
        'IsActiveUser': "True"
    } : {
        'LastName': Capitalizefirstletter(element[1]),
        'FirstName': Capitalizefirstletter(element[2]),
        'UserName': element[3],
        'IsActiveUser': "False"
    };
}

Upvotes: 3

Related Questions