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

198
Visualizações
¿Cómo buscar objetos react.js javascript?

Gracias por tu tiempo leyendo.

Necesito ordenar países por Idioma o Continente, el usuario selecciona la opción que quiere en los botones.

países es una matriz de objetos de cada país que contiene:

  • languages es una matriz de objetos, porque cada país puede tener más de un idioma
  • continente es un objeto con el nombre de continente
    Ejemplo completo (contenido de matriz de países): https://github.com/gonzaloramosf/countries

Si el usuario selecciona, por ejemplo, continentes y escribe en la entrada "es", todos los resultados relacionados con el contenido de Asia se enumeran juntos en un grupo y no repiten el título del continente en cada uno, lo mismo necesito con los idiomas.
Este es mi código:

 const CountrySearch = ({countries}) => { const [searchTerm, setSearchTerm] = useState(""); console.log(countries) return ( <div className="search"> <h1>Country Search</h1> <span> Some random text </span> <div className="searchResults"> <input type="text" placeholder="Search country..." onChange={event => { setSearchTerm(event.target.value) }}/> <div className="groupBy"> <h2> Group by: </h2> <div> <button> Continent </button> <button> Language </button> </div> </div> <div> {countries.filter((val) => { if (searchTerm === "") { return "" } else if (val.name.toLowerCase().includes(searchTerm.toLowerCase())){ return val } }).map((val, key) => { return ( <div key={key}> <h2> {val.continent.name} </h2> <div className="countryInfo"> <div> <span>{val.emoji}</span> <h3> {val.name} </h3> </div> <p> Capital: {val.capital} </p> <p> Currency: {val.currency} </p> </div> </div> ) }) } </div> </div> </div> ) } export default CountrySearch;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Primero filtre los datos y luego agrúpelos por continente usando reduce y luego recorra las matrices y cree el JSX deseado.

Puede consultar el fragmento a continuación ( escriba "s" en el cuadro de entrada ):

 const countries = [ { name: "India", continent: { name: "Asia" }, languages: [{ name: "Hindi" }, { name: "English" }, { name: "Marathi" }], }, { name: "Sri Lanka", continent: { name: "Asia" }, languages: [{ name: "Srilankan" }, { name: "Tamil" }], }, { name: "Spain", continent: { name: "Europe" }, languages: [{ name: "Spanish" }, { name: "English" }], }, { name: "Slovakia", continent: { name: "Europe" }, languages: [{ name: "English" }], }, ]; function App() { const [searchTerm, setSearchTerm] = React.useState(""); return ( <div> <input type="text" value={searchTerm} onChange={({ target }) => setSearchTerm(target.value)} /> {Object.entries( countries .filter((c) => c.name.toLowerCase().includes(searchTerm.toLowerCase()) ) .reduce((res, c) => { if (!res[c.continent.name]) { res[c.continent.name] = []; } res[c.continent.name].push(c); return res; }, {}) ).map(([continent, countries]) => ( <ul key={continent}> <li> <div>{continent}</div> <ul> {countries.map(({ name, languages }) => ( <li key={name}> <div>{name}</div> <ul> {languages.map(({ name }) => ( <li key={name}>{name}</li> ))} </ul> </li> ))} </ul> </li> </ul> ))} </div> ); } const root = ReactDOM.createRoot(document.getElementById("root")); root.render(<App />);
 <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <div id="root"></div>

A continuación se muestra la parte del código del fragmento anterior que realiza la agrupación:

 Object.entries( countries .filter((c) => c.name.toLowerCase().includes(searchTerm.toLowerCase())) .reduce((res, c) => { if (!res[c.continent.name]) { res[c.continent.name] = []; } res[c.continent.name].push(c); return res; }, {}) );
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