如何检查TypeScript中的数组是否包含字符串?


Answers:


522

与JavaScript中的相同,使用Array.prototype.indexOf()

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[]'错误消息,是否需要更新tsconfig以支持ecma 6功能?
S ..

3
弄清楚了。我需要在tsconfig.json文件中的属性“ lib”的数组中添加“ es7”,例如。"lib": ["es7", "dom"]
秒。

119

您可以使用一些方法

console.log(channelArray.some(x => x === "three")); // true

您可以使用find方法

console.log(channelArray.find(x => x === "three")); // three

或者您可以使用indexOf方法

console.log(channelArray.indexOf("three")); // 2

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
这是一个值得一提的陷阱,特别是如果您来自Python。更糟糕的是,由于数组也是对象,因此它也可以在某种程度上对数组起作用。我只是没有按照您可能认为的方式工作-它检查数组中是否存在某些内容作为索引。
西托(Cito)

5

使用JavaScript Array includes()方法

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

自己尝试» 链接

定义

包括()方法确定阵列是否包含指定的元素。

如果数组包含元素,则此方法返回true,否则返回false。


1

TS有许多用于阵列的实用方法,可通过Arrays的原型获得。有多种方法可以实现此目标,但最方便的两种方法是:

  1. Array.indexOf() 将任何值用作参数,然后返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1。
  2. Array.includes()将任何值用作参数,然后确定数组是否包含this值。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

1

您可以使用filter

this.products = array_products.filter((x) => x.Name.includes("ABC"))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.