[javascript] PHP의 in_array ()에 해당하는 JavaScript

JavaScript에서 한 배열의 값을 비교하여 다른 배열에 있는지 확인하는 방법이 있습니까?

PHP의 in_array기능과 비슷 합니까?



답변

아니요, 없습니다. 이러한 이유로 가장 인기있는 라이브러리는 유틸리티 패키지에 하나와 함께 제공됩니다. 예제는 jQuery의 inArray 와 Prototype의 Array.indexOf 를 확인하십시오 .

jQuery의 구현은 예상대로 간단합니다.

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

깔끔한 양의 배열 요소를 다루는 경우 위의 방법으로 멋지게 할 수 있습니다.

편집 : 으악. 배열이 다른 배열 안에 있는지 확인하고 싶지 않은지도조차 알지 못했습니다. PHP 문서에 따르면 이것은 PHP의 예상되는 동작입니다 in_array.

$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found\n";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found\n";
}

if (in_array('o', $a)) {
    echo "'o' was found\n";
}

// Output:
//  'ph' was found
//  'o' was found

Chris와 Alex가 게시 한 코드는이 동작을 따르지 않습니다. Alex는 Prototype의 indexOf 공식 버전이며 Chris는 PHP와 비슷 array_intersect합니다. 이것은 당신이 원하는 것을합니다 :

function arrayCompare(a1, a2) {
    if (a1.length != a2.length) return false;
    var length = a2.length;
    for (var i = 0; i < length; i++) {
        if (a1[i] !== a2[i]) return false;
    }
    return true;
}

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(typeof haystack[i] == 'object') {
            if(arrayCompare(haystack[i], needle)) return true;
        } else {
            if(haystack[i] == needle) return true;
        }
    }
    return false;
}

그리고 이것에 대한 위의 테스트 :

var a = [['p','h'],['p','r'],'o'];
if(inArray(['p','h'], a)) {
    alert('ph was found');
}
if(inArray(['f','i'], a)) {
    alert('fi was found');
}
if(inArray('o', a)) {
    alert('o was found');
}
// Results:
//   alerts 'ph' was found
//   alerts 'o' was found

Array 프로토 타입을 의도적으로 확장하지는 않았는데, 일반적으로 그렇게하는 것은 좋지 않습니다.


답변

현재 Array.prototype.includes:

contains () 메서드는 배열에 특정 요소가 포함되어 있는지 확인하여 적절하게 true 또는 false를 반환합니다.

var a = [1, 2, 3];
a.includes(2); // true 
a.includes(4); // false

통사론

arr.includes(searchElement)
arr.includes(searchElement, fromIndex)


답변

Array.indexOfJavaScript 1.6에서 도입되었지만 이전 브라우저에서는 지원되지 않습니다. 고맙게도 Mozilla의 문제 는 당신을 위해 모든 노력 을 다했으며 호환성을 위해 이것을 제공했습니다.

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

스크립팅의 즐거움을위한 편리한 사용 스 니펫도 있습니다.


답변

인덱스가 순서에 맞지 않거나 인덱스가 연속적이지 않으면 여기에 나열된 다른 솔루션의 코드가 손상됩니다. 다소 더 나은 솔루션은 다음과 같습니다.

function in_array(needle, haystack) {
    for(var i in haystack) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

그리고 보너스로 다음은 PHP의 array_search와 같습니다 (배열에서 요소의 키를 찾는 경우).

function array_search(needle, haystack) {
    for(var i in haystack) {
        if(haystack[i] == needle) return i;
    }
    return false;
}


답변

Locutus 라는 프로젝트가 있으며 Javascript로 PHP 함수를 구현하고 in_array () 가 포함되어 있으므로 PHP에서 사용하는 그대로 사용할 수 있습니다.

사용 예 :

in_array('van', myArray);

in_array(1, otherArray, true); // Forcing strict type


답변

w3schools에서이 학습에 설명 된대로 “include”기능을 간단히 사용할 수 있습니다.

그것은 보인다

let myArray = ['Kevin', 'Bob', 'Stuart'];
if( myArray.includes('Kevin'))
console.log('Kevin is here');


답변

var a = [1,2,3,4,5,6,7,8,9];

var isSixInArray = a.filter(function(item){return item==6}).length ? true : false;

var isSixInArray = a.indexOf(6)>=0;