Как я могу узнать, содержит ли массив определенную строку?

#javascript #arrays #string

Вопрос:

В моем массиве есть следующие элементы:

 var mystring;
var myname = "Level 1-1";
var myarray = [
    "My Level 1-11 Ticket",
    "My Level 1-1 Ticket",
    "My Level 10-1 Ticket",
    "My Level 10-11 Ticket"
];

 for (var i = 0; i <= myarray.Count - 1; i  ) {
     if (myname == ) {
         mystring = myarray[i];
         break;
     }
 }
 

Теперь я хочу выяснить, есть ли в массиве элемент, содержащий строку «Уровень 1-1». Но я хочу вернуть только строку, которая точно содержит «Уровень 1-1», я не хочу возвращать подобные строки, такие как «Уровень 1-11».

Строки в myarray будут иметь только такие значения, как: Уровень 1-1, Уровень 1-2, Уровень 1-10, Уровень 1-11, Уровень 10-1, Уровень 10-11.

Строки в myarray никогда не будут иметь таких значений, как: Уровень 1, Уровень 1 -, Уровень -1, Уровень-1-1.

Как я могу вернуть только тот элемент myarray, который точно содержит «Уровень 1-1»?

Комментарии:

1. это означает, что вам нужно равняться (пробелу)уровню 1-1(пробел).

2. В дополнение к ответам, которые вы уже получили, массивы не имеют Count свойств в javascript, у них есть length .

Ответ №1:

Для этого вы можете использовать регулярное выражение,

 let arr = ["My Level 1-11 Ticket",
"My Level 1-1 Ticket",
"My Level 10-1 Ticket",
"My Level 10-11 Ticket"];

let inputStr = "Level 1-1";

let result = arr.find(e => e.match(RegExp(`\b${inputStr}\b`)));

console.log(result); 

Или, если ваша строка может отображаться в начале, конце или середине, вы можете использовать эту

     let arr = ["My Level 1-11 Ticket",
        "My Level 1-1 Ticket",
        "My Level 10-1 Ticket",
        "My Level 10-11 Ticket",
        "Level 11-11 Ticket",
        "My Level 12-11"];

        let inputStr = "Level 11-11";

        let result = arr.find(e => e.match(RegExp(`([^\w]|^)${inputStr}([^\w]|$)`)));

        console.log(result); 

Ответ №2:

В этом случае использование регулярных выражений будет более полезным.

В регулярном выражении ^ $ используется для сопоставления начала, конца и s пробела (новая строка, вкладка, пробел и т. Д.).

 function getTheExactStrings(myarray, myname) {
    // Write a regular expression as per your need to match the substrings
    const regex = new RegExp(`.*(\s |^)${myname}(\s |$).*`);

    // Iterate over array items and try to return true/false using `test() method`
    return myarray.filter((name) => {
        return regex.test(name);
    });
}

// start
var mystring;
var myname = "Level 1-1";
var myarray = [
    "My Level 1-11 Ticket",
    "My Level 1-1 Ticket",
    "My Level 10-1 Ticket",
    "My Level 10-11 Ticket",
];

// Call the function to get result
console.log(getTheExactStrings(myarray, myname)); // [ 'My Level 1-1 Ticket' ]
  
 

Я думаю, это должно решить вашу проблему. Вы можете внести изменения в приведенный выше код в соответствии с вашими потребностями. Я бы посоветовал вам написать функцию, которая может тестировать ее с помощью разных массивов.

Рекомендации

В случае, если вы хотите узнать о регулярных выражениях Javascript, ознакомьтесь с приведенной ниже документацией.