TypeScript에 배열에 문자열이 포함되어 있는지 어떻게 확인합니까?


274

현재 Angular 2.0을 사용하고 있습니다. 다음과 같은 배열이 있습니다.

var channelArray: Array<string> = ['one', 'two', 'three'];

channelArray에 'three'문자열이 포함되어 있는지 TypeScript에서 어떻게 확인할 수 있습니까?


16
되어야한다channelArray: string[]
Nitzan Tomer


이것은 Typescript에 특정한 것이 아닙니다
myfashionhub

답변:


523

Array.prototype.indexOf ()를 사용하는 JavaScript와 동일합니다 .

console.log(channelArray.indexOf('three') > -1);

또는 ECMAScript 2016 Array.prototype.includes () 사용 :

console.log(channelArray.includes('three'));

@Nitzan이 보여주는 것과 같은 방법을 사용하여 문자열을 찾을 수도 있습니다. 그러나 일반적으로 문자열 배열이 아니라 객체 배열에 대해 수행합니다. 그 방법은 더 현명했다. 예를 들어

const arr = [{foo: 'bar'}, {foo: 'bar'}, {foo: 'baz'}];
console.log(arr.find(e => e.foo === 'bar')); // {foo: 'bar'} (first match)
console.log(arr.some(e => e.foo === 'bar')); // true
console.log(arr.filter(e => e.foo === 'bar')); // [{foo: 'bar'}, {foo: 'bar'}]

참고

Array.find ()

Array.some ()

Array.filter ()


1
내가 얻을 [ts] Property 'includes' does not exist on type 'string[]'오류를, 나는이 ECMA (6) 기능을 지원하는 내 tsconfig를 업데이트해야합니까?
S ..

3
알아 냈습니다. tsconfig.json 파일에서 "lib"속성의 배열에 "es7"을 추가해야했습니다. "lib": ["es7", "dom"]
S ..


10

코드가 ES7 기반 인 경우 :

channelArray.includes('three'); //will return true or false

그렇지 않은 경우, 예를 들어 babel transpile없이 IE를 사용하는 경우 :

channelArray.indexOf('three') !== -1; //will return true or false

indexOf메소드는 요소가 배열에있는 위치를 반환합니다. 왜냐하면 !==바늘이 첫 번째 위치에서 발견되면 -1과 다른 값을 사용하기 때문입니다 .


8

또한 "in"키워드 는 배열에서 작동하지 않습니다. 객체에서만 작동합니다.

propName in myObject

배열 포함 테스트는

myArray.includes('three');

2
특히 파이썬 출신이라면 언급 할 가치가있는 함정입니다. 더 나쁜 것은 배열이 객체이기 때문에 어쨌든 작동합니다. 나는 당신이 아마 생각 해야하는 방식으로 작동하지 않습니다-대신 배열에 무언가가 색인으로 존재하는지 확인합니다.
Cito

5

를 사용하여 자바 스크립트 배열 () 포함 방법

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var n = fruits.includes("Mango");

직접 해보기» 링크

정의

포함 () 메소드는 배열 지정된 요소가 포함되어 있는지 여부를 판정한다.

이 메소드는 배열에 요소가 포함되어 있으면 true를, 그렇지 않으면 false를 리턴합니다.


1

TS에는 어레이 프로토 타입을 통해 사용할 수있는 어레이에 대한 많은 유틸리티 방법이 있습니다. 이 목표를 달성 할 수있는 여러 가지가 있지만이 목적에 가장 편리한 두 가지는 다음과 같습니다.

  1. Array.indexOf() 임의의 값을 인수로 사용하여 주어진 요소가 배열에서 발견 될 수있는 첫 번째 색인을 리턴하거나없는 경우 -1을 리턴합니다.
  2. Array.includes()임의의 값을 인수로 취한 후 배열에이 값이 포함되는지 여부를 결정합니다. true값이 발견 되면를 반환 하고 그렇지 않으면를 반환 false합니다.

예:

var channelArray: string[] = ['one', 'two', 'three'];
console.log(channelArray.indexOf('three'));      // 2
console.log(channelArray.indexOf('three') > -1); // true
console.log(channelArray.indexOf('four') > -1);  // false
console.log(channelArray.includes('three'));     // ture


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.