Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

127
Vistas
Dividir una matriz en dos objetos diferentes

Tengo un const teams . Quiero dividir esta array en dos array . El primer equipo debe ser el equipo sin número en el primer carácter del nombre, y el segundo equipo debe tener números en el primer carácter del equipo.

 const [teams, setTeam] = useState([]); const teams = [{id: 1, name: "1-First"}, {id: 2, name: "Winner"}, {id: 3, name: "2-Second"}] // teamsWithNumber var myArray = teams.filter(function (obj) { return obj.name.match('/^[A-Z0-9]/i') }); const teamsWithNumber = myArray; // teamsWithOUTNumber var myArray = teams.filter(function (obj) { return obj.name!== obj.name.match('/^[A-Z0-9]/i') }); const teamsWithOUTNumber = myArray;

mi salida es

 // console.log(teamsWithOUTNumber) [OUT] []

Mi resultado deseado

 teamsWithOUTNumber = [id: 2, name: "Winner"}] teamsWithNumber = [{id: 1, name: "1-First"}, {id: 3, "2-Second"}]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Su comprensión de RegExp parece tener algunas fallas fundamentales: puede resultarle útil usar una utilidad como Regex101 para ayudarlo con una explicación más sencilla de lo que hace su patrón. Para el que proporcionó anteriormente, la herramienta establece específicamente:

  • ^ afirma la posición al comienzo de una línea
  • Haga coincidir un solo carácter presente en la lista a continuación [A-Z0-9]
    • AZ coincide con un solo carácter en el rango entre A (índice 65 ) y Z (índice 90 ) (se distingue entre mayúsculas y minúsculas)
    • 0-9 coincide con un solo carácter en el rango entre 0 (índice 48 ) y 9 (índice 57 ) (se distingue entre mayúsculas y minúsculas)

Dado que ha optado por envolver el literal RegExp entre comillas, también ha incluido sin darse cuenta los caracteres / , que no contiene ninguno de los datos con los que está probando. Como tal, ambos patrones de datos en obj.name nunca coincidirán con este patrón cada vez (con y sin la combinación inicial de dígitos y guiones), lo que lleva a los resultados que está viendo.

En su lugar, adapte el patrón para expresar exactamente lo que espera filtrar en cada matriz. He proporcionado /^\d-/ a continuación, que coincide explícitamente con las cadenas que comienzan con un dígito inicial seguido de un guión. Esto debería coincidir más estrechamente con lo que parece estar buscando.

De manera un tanto tangencial, dado que no está tratando de extraer ningún dato en este escenario, también debe optar por RegExp.test() en lugar de String.match() .

Finalmente, puede hacer que su código cumpla con sus requisitos y sea un poco más breve ejecutando filter en la misma matriz original y almacenando el resultado en dos variables separadas: una operación para filtrar aquellas que se ajustan al patrón ^\d- ( teamsWithNumber ) , y los que no ( teamsWithOUTNumber ):

 const teams = [{ id: 1, name: "1-First" }, { id: 2, name: "Winner" }, { id: 3, name: "2-Second" } ] const teamsWithNumber = teams.filter(obj => /^\d-/.test(obj.name)); const teamsWithOUTNumber = teams.filter(obj => /^(?!\d-)/.test(obj.name)); console.log(teamsWithNumber, teamsWithOUTNumber);

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Puedes probar esto? Cambié los valores devueltos de los filtros.

 const [teams, setTeam] = useState([]); const teams = [{id: 1, name: "1-First"}, {id: 2, name: "Winner"}, {id: 3, name: "2-Second"}] // teamsWithNumber var myArray = teams.filter(function (obj) { return !/^[-]?\d+$/.test(obj.name[0]); }); const teamsWithNumber = myArray; // teamsWithOUTNumber var myArray = teams.filter(function (obj) { return !/^[-]?\d+$/.test(obj.name[0]); }); const teamsWithOUTNumber = myArray;
about 4 years ago · Juan Pablo Isaza Denunciar

0

.match('/^[A-Z0-9]/i') no funcionará, el literal RegExp es una cadena: use .match(/^[A-Z0-9]/i) .

En realidad, solo necesita probar /^\d/ (el primer carácter de la cadena a probar es un número). Compruebe RegExp @ MDN .

Puedes usar un reductor usando esa prueba, algo así como

 const teams = [{ id: 1, name: "1-First" }, { id: 2, name: "Winner" }, { id: 3, name: "2-Second" } ]; const [numbered, notNumbered] = teams .reduce(([t1, t2], val) => [...[t1, t2], /^\d/.test(val.name) ? t1.push(val) : t2.push(val)], [ [], [] ]); console.log(`with number: ${ JSON.stringify(numbered)}, \nno number: ${ JSON.stringify(notNumbered)}`);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda