[javascript] jQuery.inArray (), 올바르게 사용하는 방법?

처음 작업 할 jQuery.inArray()때 좀 이상하게 행동합니다.

객체가 배열에 있으면 0을 반환하지만 Javascript에서는 0이 false입니다. 따라서 다음과 같이 출력됩니다 : “is array in”

var myarray = [];
myarray.push("test");

if(jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

if 문을 다음과 같이 변경해야합니다.

if(jQuery.inArray("test", myarray)==0)

그러나 이것은 코드를 읽을 수 없게 만듭니다. 특히이 기능을 모르는 사람에게 적합합니다. “test”가 배열에있을 때 jQuery.inArray ( “test”, myarray)가 true를 제공 ​​할 것으로 예상합니다.

그래서 제 질문은 왜 이런 식으로 이루어 집니까? 나는 이것을 정말로 싫어한다. 그러나 그렇게하는 좋은 이유가 있어야합니다.



답변

inArray항목이 배열에 존재하는지 여부를 나타내는 부울이 아닌 배열의 요소 색인을 반환합니다. 요소를 찾지 못하면 -1반환됩니다.

따라서 항목이 배열에 있는지 확인하려면 다음을 사용하십시오.

if(jQuery.inArray("test", myarray) !== -1)


답변

$.inArray발견되면 요소 의 색인 을, 부울 값이 아닌 경우 -1을 리턴합니다 . 그래서 맞습니다

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
} 


답변

답은 결과가 참인지 거짓이 아닌 -1보다 큰지 확인하는 문서 검사의 첫 번째 단락에서 나옵니다.

$ .inArray () 메서드는 일치하는 것을 찾지 못하면 -1을 반환한다는 점에서 JavaScript의 기본 .indexOf () 메서드와 유사합니다. 배열의 첫 번째 요소가 value와 일치하면 $ .inArray ()는 0을 반환합니다.

JavaScript는 0을 느슨하게 false (예 : 0 == false, 0! == false)로 취급하므로 배열 내 값의 존재를 확인하는 경우 값이 같지 않은지 (또는 ) -1.


답변

올바른 사용 방법 inArray(x, arr)전혀 사용하지 않고 대신 사용하는 것 arr.indexOf(x)입니다.

공식 표준 이름은 반환 된 값이 색인이라는 사실에서 더 명확합니다. 따라서 전달 된 요소가 첫 번째 요소 인 경우 0(Javascript에서 거짓) 반환됩니다.

(주 arr.indexOf(x)되는 IE9까지 Internet Explorer에서 지원되지 않습니다 , 그래서 당신은 이전에 IE8을 지원해야하는 경우,이하지 않습니다 작업 및 jQuery를 기능이 더 나은 대안입니다.)


답변

또는 약간 공상을 얻으려면 비트 단위 not (~) 및 논리 not (!) 연산자를 사용하여 inArray 함수의 결과를 부울 값으로 변환 할 수 있습니다.

if(!!~jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}


답변

나는 보통

if(!(jQuery.inArray("test", myarray) < 0))

또는

if(jQuery.inArray("test", myarray) >= 0)


답변

jQuery inArray () 메소드는 배열에서 값을 검색하고 부울 값이 아닌 색인을 리턴하는 데 사용됩니다. 그리고 값을 찾지 못하면 -1을 반환합니다.

따라서 배열에 값이 있는지 확인하려면 아래 연습을 따르십시오.

myArray = new Array("php", "tutor");
if( $.inArray("php", myArray) !== -1 ) {

    alert("found");
}

참고