programing

JavaScript가 배열에 있습니다.

bestprogram 2023. 5. 27. 12:01

JavaScript가 배열에 있습니다.

예를 들어 다음과 같습니다.

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

더 많은 어레이 요소가 있지만 읽기 쉽도록 몇 가지 요소만 있습니다.어쨌든, 나는 "for" 루프를 할 수 있지만, 당신이 지도를 클릭할 때마다 500개의 루프를 할 것입니다.특정 문자열이 배열에 있는지 확인할 수 있는 다른 방법이 있습니까?

사용해 보십시오.

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

앞에서 언급했듯이, 브라우저가 지원하는 경우indexOf(),좋았어!그렇지 않은 경우에는 이를 폴리싱하거나 Lodash/언더스코어와 같은 유틸리티 벨트에 의존해야 합니다.

이 새로운 ES2016 추가 기능을 추가하고 싶었습니다(이 질문을 계속 업데이트하기 위해).

Array.prototype.include()

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

일부 브라우저는 지원합니다.

만약 그렇지 않다면, 당신은 그것을 증가시킬 수 있습니다.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;
  };
}

출처.

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
}

언더스코어.js

교차 브라우저를 준수하며 데이터가 정렬된 경우 이진 검색을 수행할 수 있습니다.

_.indexOf

_.indexOf(array, value, [isSorted])배열에서 값을 찾을 수 있는 인덱스를 반환합니다. 배열에 값이 없으면 -1을 반환합니다.누락되지 않은 경우 네이티브 인덱스 Of 함수를 사용합니다.큰 배열로 작업하는 경우 배열이 이미 정렬되어 있으면 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');   
}
if(array.indexOf("67") != -1) // is in array

어레이를 룩업에만 사용한다고 가정하면 세트(ES6에 소개됨)를 사용할 수 있습니다. 이를 통해 O(1)에서 요소를 찾을 수 있습니다. 즉, 룩업은 하위 선형입니다.의 전통적인 방법으로.includes()그리고..indexOf()지정한 항목이 배열에 존재하지 않거나 마지막 항목인 경우에도 배열의 500개(, N) 요소를 모두 살펴봐야 할 수 있습니다.이는 비효율적일 수 있지만 세트의 도움을 받아 모든 요소를 살펴볼 필요는 없으며 대신 해당 요소가 세트 내에 있는지 즉시 확인합니다.

const blockedTile = new Set(["118", "67", "190", "43", "135", "520"]);

if(blockedTile.has("118")) {
  // 118 is in your Set
  console.log("Found 118");
}

어떤 이유로 집합을 다시 배열로 변환해야 하는 경우 Array.from() 또는 확산 구문(...)을 사용하여 변환할 수 있지만, 이는 전체 집합의 내용(O(N))을 통해 반복됩니다.또한 집합에는 중복 항목이 저장되지 않으므로 배열에 중복 항목이 포함되지 않습니다.

어레이가 최상의 솔루션이 아니기 때문에 다른 데이터 구조를 사용할 것입니다.

배열 대신 다음과 같이 개체를 해시 테이블로 사용합니다.

(jsbin에도 포함됨)

var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
  map[arr[k]] = true;
}

function is_in_map(key) {
  try {
    return map[key] === true;
  } catch (e) {
    return false;
  }
}


function print_check(key) {
  console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}

print_check("x");
print_check("a");

콘솔 출력:

x exists? - yes
a exists? - no

그것은 간단한 해결책입니다.만약 당신이 객체 지향적인 접근법에 더 관심이 있다면, 구글에서 "js 해시테이블"

IMHO가 이전 브라우저와 가장 호환됨

Array.prototype.inArray = function( needle ){

    return Array(this).join(",").indexOf(needle) >-1;

}

var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );

어레이 복사본을 CSV 문자열로 변환하여 이전 브라우저에서 문자열을 테스트할 수 있습니다.

사용 가능한 JavaScript 버전에 따라 다음을 사용할 수 있습니다.

배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하거나 요소가 없으면 -1을 반환합니다.

또는:

어레이의 일부 요소가 제공된 함수에 의해 구현된 테스트를 통과하는지 여부를 테스트합니다.

그러나 이러한 존재 확인 작업을 많이 수행하는 경우 개체를 사용하여 문자열(또는 데이터로 수행하는 작업에 따라 개체와 배열)을 저장하는 것이 좋습니다.

배열 예제에서는 php(in_array)에서도 동일합니다.

 var ur_fit = ["slim_fit", "tailored", "comfort"];
 var ur_length = ["length_short", "length_regular", "length_high"];
    if(ur_fit.indexOf(data_this)!=-1){
        alert("Value is avail in ur_fit array");
    }
    else if(ur_length.indexOf(data_this)!=-1){      
         alert("value is avail in ur_legth array"); 

    }
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false

Array.filter를 사용하는 게 어때요?

var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).

코드에 복사하기만 하면 다음과 같습니다.

Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}

아래 코드를 사용해 보십시오.http://api.jquery.com/jquery.grep/ 을 확인하십시오.

var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
  return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }

0보다 크면 arr.length를 선택하면 문자열이 있고 그렇지 않으면 문자열이 없음을 의미합니다.

내 쪽에서 약간의 비트 코드(어레이에 대한 사용자 지정 함수):

    Array.prototype.in_array = function (array) {
        var $i = 0;
        var type = typeof array;
        while (this[$i]) {
            if ((type == ('number') || type == ('string'))  && array == this[$i]) {
                return true;
            } else if (type == 'object' && array instanceof Array && array.in_array(this[$i])) {
                return true
            }
            $i++;
        }
        return false;
    };


    var array = [1, 2, 3, "a", "b", "c"];

    //if string in array
    if (array.in_array('b')) {
        console.log("in array");
    }

    //if number in array
    if (array.in_array(3)) {
        console.log("in array");
    }

    // if one from array in array
    if (array.in_array([1, 'b'])) {
        console.log("in array");
    }

가장 간단한 방법은 다음과 같습니다.

(118 in blockedTile); //is true 

언급URL : https://stackoverflow.com/questions/5864408/javascript-is-in-array