IT story

JavaScript / jQuery에서 배열에 특정 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까?

hot-time 2020. 2. 9. 19:24
반응형

JavaScript / jQuery에서 배열에 특정 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까? [복제]


이 질문에는 이미 답변이 있습니다.

누군가 "specialword"배열에 나타나는지 감지하는 방법을 말해 줄 수 있습니까 ? 예:

categories: [
    "specialword"
    "word1"
    "word2"
]

이를 위해 실제로 jQuery가 필요하지 않습니다.

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

힌트 : indexOf는 지정된 검색 값이 처음으로 발생하는 위치를 나타내는 숫자를 반환하거나 절대로 발생하지 않으면 -1을 반환합니다.

또는

function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

그 지적이의 가치가 array.indexOf(..)있다 IE <9에서 지원되지 않습니다 ,하지만 jQuery의 indexOf(...)기능은 심지어 이전 버전에 대한 작동합니다.


jQuery는 다음을 제공합니다 $.inArray.

inArray는 발견 된 요소의 색인을 리턴하므로 0요소가 배열에서 첫 번째임을 나타냅니다. -1요소를 찾을 수 없음을 나타냅니다.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;

console.log(foundPresent, foundNotPresent); // true false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


3.5 년 후 수정

$.inArray효과적으로 Array.prototype.indexOf지원하지 않는 브라우저에 shim을 제공하면서 브라우저를 지원하는 브라우저 (거의 대부분은 요즘 대부분) 의 래퍼입니다 . 이는 shim을 추가하는 것과 본질적으로 동일하며 Array.prototype이는 작업을 수행하는 관용적 / JSish 방식입니다. MDN은 그러한 코드를 제공 합니다 . 요즘에는 jQuery 래퍼를 사용하는 대신이 옵션을 사용합니다.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;

console.log(foundPresent, foundNotPresent); // true false


3 년 후 다시 편집

세상에 6.5 년?!

최신 Javascript에서 가장 좋은 옵션은 다음과 Array.prototype.includes같습니다.

var found = categories.includes('specialword');

비교와 혼란스러운 -1결과가 없습니다 . 우리가 원하는 것을 수행합니다 : true또는 false. 구형 브라우저의 경우 MDN 코드를 사용하여 폴리 필 가능 합니다 .

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');

console.log(foundPresent, foundNotPresent); // true false


여기 있습니다 :

$.inArray('specialword', arr)

이 함수는 양의 정수 (주어진 값의 배열 인덱스)를 반환하거나 -1주어진 값을 배열에서 찾을 수없는 경우 반환합니다.

라이브 데모 : http://jsfiddle.net/simevidas/5Gdfc/

아마도 이것을 다음과 같이 사용하고 싶을 것입니다.

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}

for루프 를 사용할 수 있습니다 :

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}

나는 마음에 들지 않는다. $.inArray(..)대부분의 제정신이 아닌 사람들이 견딜 수없는 못생긴 jQuery 솔루션이다. 다음 contains(str)은 무기고에 간단한 방법을 추가하는 스 니펫입니다 .

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

마찬가지로 $.inArray확장을 래핑 할 수 있습니다.

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}

참고 : https://stackoverflow.com/questions/6116474/how-to-find-if-an-array-contains-a-specific-string-in-javascript-jquery



반응형