[javascript] JavaScript가 배열되어 있습니다

내가 이것을 가지고 있다고 가정 해 봅시다.

var blockedTile = new Array("118", "67", "190", "43", "135", "520");

더 많은 배열 요소가 있지만 읽기 쉬운 목적으로 몇 가지가 있습니다. 어쨌든, 나는 “for”루프를 수행 할 수 있지만 맵을 클릭 할 때마다 500 개의 루프를 수행합니다. 특정 문자열이 배열에 있는지 확인하는 다른 방법이 있습니까?



답변

이 시도:

if(blockedTile.indexOf("118") != -1)
{
   // element found
}


답변

앞서 언급했듯이, 브라우저가을 지원 indexOf()하면 훌륭합니다! 그렇지 않은 경우,이를 pollyfil하거나 lodash / underscore 와 같은 유틸리티 벨트에 의존해야 합니다 .

이 새로운 ES2016 추가 사항 을 추가하고 싶었습니다 (이 질문을 계속 업데이트하십시오).

Array.prototype.includes ()

if (blockedTile.includes("118")) {
    // found element
}


답변

function in_array(needle, haystack){
    var found = 0;
    for (var i=0, len=haystack.length;i<len;i++) {
        if (haystack[i] == needle) return i;
            found++;
    }
    return -1;
}
if(in_array("118",array)!= -1){
//is in array
}


답변

Underscore.js 사용

그것은 크로스 브라우저 준수 와 데이터가 정렬되어있는 경우 이진 검색을 수행 할 수 있습니다.

_.indexOf

_.indexOf (array, value, [isSorted]) 배열에서 값을 찾을 수있는 인덱스를 반환하거나 값이 배열에 없으면 -1을 반환합니다. 누락되지 않은 경우 native indexOf 함수를 사용합니다. 큰 배열로 작업 중이고 배열이 이미 정렬되어 있다는 것을 알고 있다면 isSorted에 대해 더 빠른 이진 검색을 사용하려면 true를 전달하십시오.

//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
    alert('true');
}else{
    alert('false');
}

//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
    alert('true');
}else{
    alert('false');
}


답변

일부 브라우저는을 지원 Array.indexOf()합니다.

그렇지 않은 경우 Array프로토 타입을 통해 오브젝트를 확장 할 수 있습니다 .

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n) // shortcut for verifying if it's NaN
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k++)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

소스 .


답변

취향에 맞게 사용하십시오.

var blockedTile = [118, 67, 190, 43, 135, 520];

// includes (js)

if ( blockedTile.includes(118) ){
    console.log('Found with "includes"');
}

// indexOf (js)

if ( blockedTile.indexOf(67) !== -1 ){
    console.log('Found with "indexOf"');
}

// _.indexOf (Underscore library)

if ( _.indexOf(blockedTile, 43, true) ){
    console.log('Found with Underscore library "_.indexOf"');
}

// $.inArray (jQuery library)

if ( $.inArray(190, blockedTile) !== -1 ){
    console.log('Found with jQuery library "$.inArray"');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


답변

if(array.indexOf("67") != -1) // is in array