Tengo que filtrar y asignar una matriz de cadenas a otra matriz, el problema es que solo coincide con la primera coincidencia y la otra cadena no coincide cuando debería porque probé el apttern en regex101 y funcionó.
Tengo un objeto llamado 'pilas' con múltiples variables, para simplificar solo escribo el que me interesa (stackName). objeto "pilas":
[ { "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]Hice el siguiente código para poder filtrar y mapear este objeto "apilado" en otra matriz agregando una cadena "ninguno" al principio y luego filtrándolo con un patrón de expresiones regulares que mira si la letra al final antes del número es un ' C':
this.oldstacks = ['none', ...stacks .filter(stack => stack.stackName.match('c(?=-\d)')) .map(stack => stack.stackName)];Por ejemplo, estas cadenas deben coincidir:
cc-dev-agw1d-c-1 dd-prd-agw1b-c-3Pero estos no coinciden, porque no tienen una "c" antes del número:
dd-prd-agw1b-d-3 dd-prd-agw1b-r-3Me gustaría filtrar el objeto stacks en los objetos oldStacks para que solo tome la cadena que coincida con el patrón, pero parece que no puedo averiguar cómo porque de esta manera solo toma la primera coincidencia y me gustaría todas las coincidencias de las pilas.
Gracias
El problema es que la coincidencia toma una expresión regular en lugar de una cadena, y puede usar una coincidencia solo en lugar de la afirmación de búsqueda anticipada.
const stacks = [{ "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]; const oldstacks = ['none', ...stacks .filter(stack => stack.stackName.match(/c-\d/)) .map(stack => stack.stackName) ]; console.log(oldstacks);En lugar de primero filtrar y luego mapear, también puede usar reduce:
const stacks = [{ "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]; const oldstacks = ['none', ...stacks .reduce((acc, curr) => { if (/c-\d/.test(curr.stackName)) acc.push((curr.stackName)) return acc; }, []) ]; console.log(oldstacks);