2016-08-08 3 views
1

Кто-нибудь знает, как проверить, содержит ли список строку без использования indexOf? В моем массиве некоторые строки могут содержать части других, поэтому indexOf будет создавать ложные срабатывания.Список Javascript содержит строку

В качестве примера, как бы определить, находится ли «компонент» в массиве ниже?

["component.part", "random-component", "prefix-component-name", "component"] 

Update:

Похоже, мое использование ложноположительных вводит в заблуждение. Я имел в виду, что он сказал бы, что компонент был там 4 раза, когда я хочу совместить строку сам по себе.

ie. Он должен возвращать false при проверке наличия «компонента» в приведенном ниже массиве.

["component.part", "random-component", "prefix-component-name"] 
+1

IndexOf не даст вам ложных срабатываний. Это даст вам 3. Если вы хотите найти все элементы с «otherstuff componentenet», вы можете прокручивать свой массив и проверять с помощью 'String.includes()' –

ответ

3

Используйте API Array.find.

Пример:

"use strict"; 
 

 
let items = ["component.part", "random-component", "prefix-component-name", "component"]; 
 

 
let found = items.find(item => { return item === "component.part" }); 
 

 
if (found) { 
 
    console.log("Item exists."); 
 
}

Для получения дополнительных примеров использования.

См: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find

+0

Я думаю, он хочет найти все элементы, содержащие «компонент». –

+0

@YasinYaqoobi вопрос немного неясен, и похоже, что требование заключалось в поиске ошибки для элементов, в которых есть компонент слова. Я включил другое решение, которое это делает. Смотри ниже. –

+0

Я, по-видимому, не понимал, я только хотел совместить точную строку «компонент». Пример должен был показать, почему я не мог просто использовать indexOf. – annedroiid

2

Один из способов заключается в использовании .find(), чтобы получить строку, которую вы хотите от массива.

1

Попробуйте использовать метод $ .inArray().

var list=["component.part", "random-component", "prefix-component-name", "component"]; 
if($.inArray(" component",list) != -1){ 
    console.log("Item found"); 
} 
0

Кто-нибудь знает, как проверить, если список содержит строку без использования IndexOf? В моем массиве некоторые строки могут содержать части других, поэтому indexOf будет создавать ложные срабатывания.

ложные срабатывания? Array.prototype.indexOf и Array.prototype.includes обе используют строгое равенство который делает это невозможно здесь.

-1

IndexOf не даст вам ложных срабатываний. Это даст вам 3. Если вы хотите найти все элементы, у которых есть «otherstuff componentenet», вы можете прокручивать массив и проверять с помощью String.includes()

Это удобное для новичков решение.

var arr = ["component.part", "random-component", 
 
    "prefix-component-name", "component", "asdf"]; 
 
    
 
    console.log(arr.indexOf('component')); // give u 3 
 
    
 
    for (var i = 0; i < arr.length; i++){ 
 
     if (arr[i].includes('component')){ 
 
     console.log(arr[i]); 
 
     } 
 
    }

Смежные вопросы