Подтвердить что ты не робот

Проверьте, нет ли пустого массива или нет.

Я хотел бы знать, как проверить, является ли массив пустым или нулевым в jQuery. Я пробовал array.length === 0, но это не сработало. Это также не вызывало ошибок.

Это код:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}
4b9b3361

Ответ 1

Пока ваш селектор действительно работает, я не вижу ничего плохого в вашем коде, который проверяет длину массива. Это должно делать то, что вы хотите. Существует много способов очистить ваш код, чтобы быть более простым и понятным. Здесь убрана версия с примечаниями о том, что я очистил.

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Некоторые заметки о том, что вы делали и что я изменил.

  • $(this) всегда является допустимым объектом jQuery, поэтому нет причин когда-либо проверять if ($(this)). У него могут быть какие-либо объекты DOM внутри, но вы можете проверить это с помощью $(this).length, если вам нужно, но это необязательно здесь, потому что цикл .each() не запускался, если бы не было элементов, поэтому $(this) внутри ваш цикл .each() всегда будет чем-то.
  • Неэффективно использовать $(this) несколько раз в одной и той же функции. Гораздо лучше получить его один раз в локальной переменной, а затем использовать его из этой локальной переменной.
  • Рекомендуется инициализировать массивы с помощью [], а не new Array().
  • if (value), когда значение ожидается как строка, будет защищать от value == null, value == undefined и value == "", поэтому вам не нужно делать if (value && (value != "")). Вы можете просто: if (value) проверить все три пустых условия.
  • if (album_text.length === 0) расскажет вам, является ли массив пустым, если он является допустимым инициализированным массивом (который он здесь).

Что вы пытаетесь сделать с этим селектором $("input[name='album_text[]']")?

Ответ 2

Пользователь JQuery - EmptyObject, чтобы проверить, содержит ли массив элементы или нет.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true

Ответ 3

Вы должны проверить '' (пустую строку) перед тем, как вставить в свой массив. В вашем массиве есть элементы, которые являются пустыми. Тогда ваш album_text.length === 0 будет работать нормально.

Ответ 4

Мне кажется опасным использовать $.isEmptyObject из jquery, чтобы проверить, пуст ли массив, как упоминал @jesenko. Я только что встретил эту проблему.

В isEmptyObject doc он упоминает:

Аргумент всегда должен быть простым JavaScript-объектом

которую вы можете определить с помощью $.isPlainObject. Возврат $.isPlainObject([]) неверен.