Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

129
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda