How do I check whether an array contains a string in TypeScript?
目前我正在使用Angular 2.0。 我有一个数组如下:
1 | var channelArray: Array<string> = ['one', 'two', 'three']; |
如何在TypeScript中检查channelArray是否包含字符串'three'?
与JavaScript相同,使用Array.prototype.indexOf():
1 | console.log(channelArray.indexOf('three') > -1); |
或者使用ECMAScript 2016 Array.prototype.includes():
1 | console.log(channelArray.includes('three')); |
请注意,您还可以使用@Nitzan显示的方法来查找字符串。但是,对于字符串数组,通常不会这样做,而是对于一个对象数组。那些方法更明智。例如
1 2 3 4 | 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 | console.log(channelArray.some(x => x ==="three")); // true |
您可以使用find方法:
1 | console.log(channelArray.find(x => x ==="three")); // three |
或者您可以使用indexOf方法:
1 | console.log(channelArray.indexOf("three")); // 2 |
如果您的代码是基于ES7的:
1 | channelArray.includes('three'); //will return true or false |
如果没有,例如你使用IE浏览器没有babel transile:
1 | channelArray.indexOf('three') !== -1; //will return true or false |
另请注意,"in"关键字不适用于数组。它仅适用于对象。
1 | propName in myObject |
数组包含测试是
1 | myArray.includes('three'); |
TS有许多用于阵列的实用方法,可通过阵列原型获得。有多个可以实现这一目标,但最方便的两个目的是:
例:
1 2 3 4 5 | 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 |
使用JavaScript Array include()方法
1 2 | var fruits = ["Banana","Orange","Apple","Mango"]; var n = fruits.includes("Mango"); |
亲自尝试一下?链接
定义
includes()方法确定数组是否包含指定的元素。
如果数组包含元素,则此方法返回true,否则返回false。
这样做:
1 2 3 4 | departments: string[]=[]; if(this.departments.indexOf(this.departmentName.trim()) >-1 ){ return; } |