Есть ли способ исключить строку, если она начинается с некоторых значений?

Есть ли способ проверить, начинается ли любое значение с любого значения в массиве?

var value = "background-color";
var value2 = "--my-variable";

var excludeItems = ["--", "-", "_"];

if (does value starts with excludeItems) {
    // then exclude
}

Всего 2 ответа


Проверьте, .some ли .some элементы в массиве тестовый startsWith строки:

 var value1 = "background-color"; var value2 = "--my-variable"; var excludeItems = ["--", "-", "_"]; const v1excluded = excludeItems.some(str => value1.startsWith(str)); const v2excluded = excludeItems.some(str => value2.startsWith(str)); console.log(v1excluded, v2excluded); 

В этом конкретном случае, поскольку строка, которая начинается с -- также обязательно начинается с - , вы можете полностью исключить -- из массива excludeItems , если хотите.

Если excludeItems является статическим, и у вас есть много символов для тестирования, вы можете сделать это более кратко с помощью регулярного выражения и набора символов:

 var value1 = "background-color"; var value2 = "--my-variable"; const excludeItems = /^[-_!@#$%]/; const v1excluded = excludeItems.test(value1); const v2excluded = excludeItems.test(value2); console.log(v1excluded, v2excluded); 


Наряду с ответом CertainPerformance вы можете также иметь oneliner в виде чего-то вроде [value1, value2].filter(val => excludeItems.some(str => val.startsWith(str)))

 var value1 = "background-color"; var value2 = "--my-variable"; var excludeItems = ["--", "-", "_"]; const excluded = [value1, value2].filter(val => excludeItems.some(str => val.startsWith(str))); const included = [value1, value2].filter(val => !excludeItems.some(str => val.startsWith(str))); console.log(excluded); console.log(included); 


Есть идеи?

10000