как выполнить оператор if в javascript, чтобы проверить, пуст ли массив JSON?

#javascript #sql #arrays #json #if-statement

#javascript #sql #массивы #json #if-statement

Вопрос:

Я пробую различные ответы из stack overflow, чтобы написать оператор if, который проверяет, является ли массив JSON заполненным или пустым. Однако консоль.журнал всегда возвращает значение undefined. Я использую node.js и webstorm как IDE. могу ли я получить некоторую помощь для решения этой проблемы?

 function selectData(){
    var sql = "SELECT * FROM cust where LastName = '"  registerArray[0] "'";
    con.query(sql, function (err, result) {
        console.log(JSON.stringify(result)); //correctly displaying stuffs from db
        if (result) { //statement not working correctly.
            var pw = "SELECT ID FROM cust where LastName = '"  registerArray[0] "'";
            con.query(pw, function (err, result) {
                var idcheck  = JSON.stringify(result);
                console.log(result); //always shows undefined
                if (idcheck !== registerArray[0]){
                    return ("{re enter correct password}");
                } else {
                    return ("{login successfully}");
                }
            });

        } else {
            return("{sign up first}");
        }
    });
}
con.end();
  

}

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

1. Просто сделайте, if (result) это проверит, result является ли значение ложным или истинным

2. ваш запрос уязвим для атаки «sql injection». con.query("SELECT * FROM cust WHERE LastName = ?", [registerArray[0]], function (err, res) { ... }) это то, что вы хотите использовать

3. Что console.log(JSON.stringify(result)); вам дает?

4. @iArcadia вторая консоль.log(JSON.stringify(результат)) выдает неопределенный

5. @KunalMukherjee как я должен это использовать?

Ответ №1:

Проблема в том, что вы используете оператор строгого равенства с con.запрос, который возвращает нулевой массив ([]) , если он ничего не нашел. Поскольку вы используете строгое сравнение ([]) !== 0 , оно принимает значение TRUE, что вызывает вашу проблему.

Решение

Вы могли бы изменить свой оператор на if (result) or, более четкую и подробную версию, if (result.length > 0 ) которая завершила бы то, что вы пытаетесь сделать.

Вы можете узнать больше о том, как JS вычисляет выражения из этой статьи Истинные и ложные значения в javascript

Ответ №2:

Используйте Object.keys

 function selectData(){
    var sql = "SELECT * FROM cust where LastName = '"  registerArray[0] "'";
    con.query(sql, function (err, result) {
        console.log(JSON.stringify(result));
        if (Object.keys(result).length !== 0 ){ 
  

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

1. по-прежнему отображается undefined. Выдаю эту ошибку на моей стороне клиента: VM19: 1 Неперехваченная ошибка синтаксиса: неожиданный токен r в JSON в позиции 1 в JSON.parse (<анонимный>) в XMLHttpRequest. Отправьте logindata.xhttp.onreadystatechange

2. Опубликованный вами код не содержит JSON.parse

Ответ №3:

Чтобы проверить undefined и наличие элементов…

 if (result !== undefined amp;amp; Object.keys(result).length !== 0) {
     //you've got an object and it has some stuff 
} else {
     //handle situation where you've got nothing
}
  

Редактировать: по-видимому, вы не должны использовать getOwnPropertyNames, поскольку некоторые защищенные фреймворки заблокируют это .. вместо этого используйте Object.keys .