Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

198
Views
¿Cómo puedo obtener una matriz de objetos después de iterar una matriz de cadenas?

Mi aplicación simple tiene:

  • datos: matriz de objetos
  • usuarios, setUsers: enganches useState
  • filtros: matriz de cadenas
  • filteredUsers: debe ser una matriz de objetos;

En mi aplicación, un usuario puede hacer clic y agregar una cadena a una matriz de filtros (los filtros cambian), luego me gustaría crear una nueva matriz de objs filteredUsers, enviarla a los usuarios (por setUsers (filteredUsers)) y representar una nueva lista, basada en filtros.

Cuando estoy usando una sola cadena, por ejemplo, getFilteredUsers('string') funciona, pero no puedo hacerlo con una matriz.

 const users = [ { id: 849, name: 'John', city: 'London', languages: ['English'] }, { id: 294, name: 'Ola', city: 'Stockholm', languages: ['Swedish', 'English'] }, { id: 585, name: 'Stefano', city: 'Naples', languages: ['Italian', 'French'] }, { id: 946, name: 'Anna', city: 'Paris', languages: ['French'] } ] const four = document.querySelector('.four'); const arrayFilter = arr => { const newUsers = filters.map(filter => getUsers(filter)); four.textContent = JSON.stringify(newUsers); return newUsers } const test = ['French']; console.log(arrayFilter(test))

También intenté usar useEffect, pero sin resultados.

jsfiddle: https://jsfiddle.net/gmp5doqv/165/
GitHub: https://github.com/lukaasz555/job-list/blob/main/components/Main/Main.tsx

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Aquí hay un ejemplo de cómo realizar este filtro usando React y los métodos de matriz .some e .includes

 // Get a hook function const { useState } = React; function App() { const users = [ { id: 849, name: 'John', city: 'London', languages: ['English'] }, { id: 294, name: 'Ola', city: 'Stockholm', languages: ['Swedish', 'English'] }, { id: 585, name: 'Stefano', city: 'Naples', languages: ['Italian', 'French'] }, { id: 946, name: 'Anna', city: 'Paris', languages: ['French'] } ]; const languages = [ 'English', 'Swedish', 'Italian', 'French' ]; const [selectedLangs, setSelectedLangs] = useState( Object.fromEntries(languages.map(s => [s, false])) ); function handleCheckboxClick({target}) { const { value, checked } = target; const selectedClone = structuredClone(selectedLangs); const state = selectedClone[value]; selectedClone[value] = !state; setSelectedLangs(selectedClone); } const selectedLangsThatAreTrue = Object.entries(selectedLangs) .filter(([lang, val]) => val) .map(([lang]) => lang); const targetData = users.filter( ({languages}) => languages.some(lan => selectedLangsThatAreTrue.includes(lan)) ); return ( <div className="App"> Select Languages: { languages.map(s => ( <label key={s}> {s} <input value={s} onClick={handleCheckboxClick} type="checkbox" /> </label> )) } <br /> { targetData.map(({name}) => <span key={name}> {name} </span>) } </div> ); }; // Render it ReactDOM.createRoot( document.getElementById("root") ).render( <App /> );
 .App label { user-select: none; }
 <div id="root"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.development.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.development.js"></script>

about 4 years ago · Juan Pablo Isaza Report

0

Esta es una función para comprobar que un usuario pasa un filtro:

 const checkUser = (user, filter) => user.name === filter || user.city === filter || user.languages.includes(filter);

Esta es una función que verifica que un usuario pase todos los filtros:

 let filters = null; const userFilter = user => { for(let i = 0, l = filters.length ; i < l ; i++) { if(!checkUser(user, filters[i])) { return false; } } return true; }

Y así es como puedes usarlo:

 filters = ['French', 'Naples']; filteredUsers = users.filter(userFilter); // gives Stefano, the only one with French and Naples filters = ['English']; filteredUsers = users.filter(userFilter); // gives John and Ola, the only ones with English filters = []; filteredUsers = users.filter(userFilter); // gives everyone ! filters = ['Portuguese']; filteredUsers = users.filter(userFilter); // gives no one
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!