배열이 비어 있는지 또는 null인지 확인


106

jQuery에서 배열이 비어 있는지 또는 null인지 확인하는 방법을 알고 싶습니다. 시도 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
}

2
"일반 JavaScript"에서와 같은 방식 : stackoverflow.com/questions/2672380/…
Julien Schmidt

1
@Julien,이 스레드를 시작하기 전에 해당 스레드에 나열된 모든 솔루션을 시도했습니다. 그들 중 누구도 어떻게 든 일하지 않았습니다.
입력

컨텍스트에 대한 코드를 더 얻을 수 있습니까? JavaScript, HTML 주변? 당신은 반드시이 있습니까 $("input[name='album_text[]']")실제로 요소를 반환?
Jon Adams

@JulienSchmidt : 연결 한 질문 은 전체 배열이 아닌 배열 이 비어 있는지 확인하는 것 입니다.
Dan Dascalescu

답변:


168

선택기가 실제로 작동하는 한 배열 길이를 확인하는 코드에 아무런 문제가 없습니다. 그것은 당신이 원하는 것을해야합니다. 더 간단하고 읽기 쉽게 코드를 정리하는 방법에는 여러 가지가 있습니다. 다음은 내가 정리 한 내용에 대한 메모가있는 정리 된 버전입니다.

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
}

당신이하던 일과 내가 바꾼 일에 대한 몇 가지 메모.

  1. $(this)는 항상 유효한 jQuery 객체이므로 확인할 이유가 없습니다 if ($(this)). 내부에 DOM 개체 $(this).length가 없을 수도 있지만 필요한 경우 이를 통해 확인할 수 있지만 .each()항목이 없으면 루프가 실행되지 않으므로 루프 $(this)내부에 .each()항상 무언가가 있기 때문에 여기에서는 필요 하지 않습니다 .
  2. 동일한 함수에서 $ (this)를 여러 번 사용하는 것은 비효율적입니다. 한 번 지역 변수로 가져온 다음 해당 지역 변수에서 사용하는 것이 훨씬 좋습니다.
  3. []대신 .NET을 사용하여 배열을 초기화하는 것이 좋습니다 new Array().
  4. if (value)값에서 것이다 모두 보호하는 문자열 것으로 예상 될 때 value == null, value == undefined그리고 value == ""당신이 할 필요가 없습니다를 if (value && (value != "")). if (value)세 가지 빈 조건을 모두 확인하기 위해 할 수 있습니다 .
  5. if (album_text.length === 0) 유효하고 초기화 된 배열 (여기에 있음)이면 배열이 비어 있는지 여부를 알려줍니다.

이 선택기로 무엇을하려고 $("input[name='album_text[]']")합니까?


5
@MaciekSemik은 - 볼 stackoverflow.com/questions/359494/...을 . ===특별히 형식 변환을 허용하지 않는 한 항상 엄격한 항등 ( )을 사용합니다. 들어가는 것은 좋은 습관입니다.
jfriend00 2014-04-13

73

사용자 JQuery는 배열에 요소가 포함되어 있는지 여부를 확인하는 EmptyObject입니다.

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

2
특히 변수가 객체 일 수있는 경우 길이를 확인하는 것보다 훨씬 더 신뢰할 수 있습니다 (객체가있는 경우 길이는 비어 있는지 확인하는 데 작동하지 않습니다).
gaborous 2014

제 생각에는 이것이 더 적절한 대답입니다.
earl3s

4
isEmptyObject확장 된 false경우 항상 반환 합니다 ( Array.prototype예 : Array.prototype.someFunction = function () {};배열이 비어 있더라도). 일부 프레임 워크 (예 : Ember.js)는 기본적으로 Array 프로토 타입을 확장합니다.
jesenko

4
주의하세요 isEmptyObject! For jQuery 1.8.3 jQuery.isEmptyObject([])은 반환 false하지만 jQuery 1.11.3의 경우 반환합니다 true. 실제로 jQuery 문서 에서는 다른 유형의 개체 (DOM 요소, 기본 문자열 / 숫자, 호스트 개체)가 브라우저에서 일관된 결과를 제공하지 않을 수 있으므로 인수는 항상 일반 JavaScript 개체 여야 한다고 말합니다 . 죄송합니다. @rhinoxi의 답변을 보지 못했습니다.
Dmitry Vershinin

8

''배열로 푸시하기 전에 (빈 문자열)을 확인해야 합니다. 배열에 빈 문자열 인 요소가 있습니다. 그러면 album_text.length === 0잘 작동합니다.


업데이트 된 코드를 참조하십시오. 이 코드를 추가 if( $(this).val() && $(this).val() != '') 했지만 작동하지 않습니다.
입력

8

@jesenko가 언급했듯이 jquery에서 $ .isEmptyObject를 사용하여 배열이 비어 있는지 확인하는 것은 위험하다고 생각합니다. 방금 그 문제를 만났습니다.

에서 isEmptyObject의 문서 , 그것은 언급 :

인수는 항상 일반 JavaScript 객체 여야합니다.

으로 결정할 수 있습니다 $.isPlainObject. 의 반환 $.isPlainObject([])은 거짓입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.