Vixarc
Vixarc

Reputation: 39

Concatenate two variables into a new one with Javascript

before I explain my question, I'll put here my Json code to facilitate the comprehension.

{
    "name": "Servers Rotation",
    "version": 1.0,
    "prefix": ".svr",
    "servers": {

        "server1": {
            "svr": "01x",
            "status": 1,
            "type": "all"   
        },
        "server2": {
            "svr": "02p",
            "status": 1,
            "type": "all"   
        },
        "server3": {
            "svr": "03z",
            "status": 1,
            "type": "all"   
        }

    }
}

Now, I'm accessing this JSON and trying create a loop to verify all servers (server1, server2, server3) status to match number 1.

If server[num] status equal 1, then the server is enabled.

$.getJSON("servers.json", function(json) {
    var servers_available = Object.keys(json.servers).length;
    for(i = 1; i <= servers_available; i++) {
        if (json.servers.server+i.status == 1) {
            alert(servers_prefix+i.svr + " enabled!");
        } else {
            alert(servers_prefix+i.svr + " disabled");
        }
    }
});

But, I'm getting NaN as alert response.

What am I doing wrong? Can you help me? Thank you.

Upvotes: 0

Views: 51

Answers (3)

Maheer Ali
Maheer Ali

Reputation: 36564

You are making three mistakes over here:

  • You are using Dot Notation json.servers.server+i.status. Here you should use Bracket Notation.i.e json.servers['server'+i].status
  • You are using servers_prefix which is undefined
  • You are using global variable i. You should use let before it.

Here is the code

$.getJSON("servers.json", function(json) {
    var servers_available = Object.keys(json.servers).length;
    for(let i = 1; i <= servers_available; i++) {
        if (json.servers['server'+i].status == 1) {
            alert(json.servers['server'+i].svr + " enabled!");
        } else {
            alert(json.servers['server'+i].svr + " disabled");
        }
    }
});

You can do that in a simple way by using :

  • forEach() on the Object.values() instead of Object.keys()
  • Use Parameter destructuring to get out svr and status property of value
  • Make use of ternary operators instead of if else statments

let json = {"name": "Servers Rotation","version": 1.0,"prefix": ".svr","servers": { "server1": {"svr": "01x","status": 1,"type": "all"   },"server2": {"svr": "02p","status": 1, "type": "all"  }, "server3": { "svr": "03z", "status": 1,"type": "all"   } }}

Object.values(json.servers).forEach(({status,svr}) => {
  status === 1 ? alert(svr + " enabled!") : alert(svr + " disabled")
})

Upvotes: 1

ellipsis
ellipsis

Reputation: 12152

Use bracket notation

var json={
    "name": "Servers Rotation",
    "version": 1.0,
    "prefix": ".svr",
    "servers": {

        "server1": {
            "svr": "01x",
            "status": 1,
            "type": "all"   
        },
        "server2": {
            "svr": "02p",
            "status": 1,
            "type": "all"   
        },
        "server3": {
            "svr": "03z",
            "status": 1,
            "type": "all"   
        }

    }
}

var servers_available = Object.keys(json.servers);
for(i = 1; i <=servers_available.length; i++) {
    
    var a='server'+i;
    if (json.servers[a].status == 1) {
       alert(json.servers[a].svr + " enabled!");
   } else {
       alert(json.servers[a].svr + " disabled");
   }
}

Upvotes: 0

Jatin Parmar
Jatin Parmar

Reputation: 2900

try out this one

$.getJSON("servers.json", function(json) {
var servers_available = Object.keys(json.servers).length;
for(i = 1; i <= servers_available; i++) {
    if (json.servers["server"+i].status == 1) {
        alert(servers_prefix+i.svr + " enabled!");
    } else {
        alert(servers_prefix+i.svr + " disabled");
    }
}
});

Upvotes: 0

Related Questions