Объединить две переменные в новую с помощью Javascript

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

прежде чем я объясню свой вопрос, я приведу здесь свой 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"   
        }

    }
}
  

Теперь я обращаюсь к этому JSON и пытаюсь создать цикл для проверки состояния всех серверов (server1, server2, server3) на соответствие номеру 1.

Если состояние сервера [num] равно 1, то сервер включен.

 $.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");
        }
    }
});
  

Но я получаю NaN ответ в виде предупреждения.

Что я делаю не так? Вы можете мне помочь? Спасибо.

Комментарии:

1. Просто подсказка, чтобы лучше видеть, что происходит. Вы можете ввести debugger; в строке выше var servers_available = … а затем нажмите F12, чтобы открыть инструменты разработчика и обновить вашу страницу. Теперь вы сможете пошагово просмотреть свой код и посмотреть, что происходит.

Ответ №1:

Здесь вы допускаете три ошибки:

  • Вы используете точечную нотацию json.servers.server i.status . Здесь вы должны использовать обозначение в скобках.то есть json.servers['server' i].status
  • Вы используете servers_prefix который undefined
  • Вы используете глобальную переменную i . Вы должны использовать let перед этим.

Вот код

 $.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");
        }
    }
});
  

Вы можете сделать это простым способом, используя :

  • forEach() на Object.values() вместо Object.keys()
  • Используйте деструктурирование параметров, чтобы получить выход svr и присвоить свойству status значение
  • Используйте тернарные операторы вместо выражений if else

 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")
})  

Комментарии:

1. Здравствуйте, я получаю эту ошибку сейчас: Uncaught SyntaxError: Unexpected token [

2. Это потому, что он использовал как точечную, так и скобочную нотацию. Теперь это отредактировано.

3. Теперь это работает! Большое вам спасибо, я отмечу как правильный ответ через пять минут

Ответ №2:

попробуйте эту

 $.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");
    }
}
});
  

Ответ №3:

Используйте обозначение в скобках

 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");
   }
}