у меня есть этот массив
var array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12 ', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12']
и я хотел бы удалить элементы, содержащие "-12" и "-0"
Ожидаемый результат = ['20-2', '319-2', '161-2', '320-2']
Как я могу добиться этого ожидаемого результата в javascript.
Вы можете сделать это с помощью .filter
.
Пример:
var array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12'];
var filtered = array.filter(item => !item.includes('-12') && !item.includes('-0'));
После выполнения этого кода filtered
становится ['20-2', '319-2', '161-2', '320-2']
.
Вы можете использовать метод Array.filter в сочетании с методом String.includes.
Вот пример:
let array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12']
let newArray = array.filter((element) =>
!element.includes('-12') && !element.includes('-0')
)
console.info(newArray)
Этого можно добиться с помощью Array.filter в сочетании с методами String.includes. Метод Array.filter создает новый массив с каждым элементом, который приводит к положительному условию.
let array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12']
let filteredArray = array.filter(item => (!item.includes("-12")) && !item.includes("-0"))
console.info(filteredArray)
Ссылка:
Если вы хотите найти «12» и «0» в любой позиции строки (будь то первое или второе число), вы можете использовать регулярное выражение с \b
, символизирующим границу слова:
var array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12','3-120','112-14','12-7'];
const res = array.filter(el=>![/\b0\b/,/\b12\b/].some(rx=>rx.test(el)));
console.info(res)
Границы слов в rx
гарантируют, что такие элементы, как '3-120','112-14'
, не будут удалены из набора результатов.
Вместо использования двух регулярных выражений вы можете для данной задачи объединить требования поиска в одно:
var array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12','3-120','112-14','12-7'];
const res = array.filter(el=>!/\b(?:0|12)\b/.test(el));
console.info(res)
И, конечно же, если вы хотите удалить элементы только тогда, когда числа 0
и 12
появляются после (последнего) «-», вы можете сделать следующее:
var array = ['20-2', '319-2', '161-2', '320-2', '12-0', '575-12', '279-12', '280-12', '412-12', '423-12', '424-12', '425-12', '291-12', '0-12', '449-12','3-120','112-14','12-7'];
const res = array.filter(el=>!/-(?:0|12)$/.test(el));
console.info(res)