#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, ознакомьтесь с приведенной ниже документацией.
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp — Использование конструктора регулярных выражений
- https://www.w3schools.com/jsref/jsref_regexp_test.asp — Использование метода test()