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

96
Views
Tomando una matriz de objetos y filtrando las claves de cada objeto por una matriz de cadena

Estoy extrayendo datos de back-end de mi aplicación, pero quiero que el usuario pueda seleccionar qué teclas quiere ver. Así que he estado tratando de construir una forma para que generen una matriz de cadenas y hacer que se compare con cada objeto en la matriz y generar la nueva matriz de objetos con cada tecla excluida.

Aquí está la matriz de filtros:

 const filterData = [ 'TestOne', 'TestTwo', ]

Aquí está la matriz de objetos:

 const data = [ { _id: "62ec2f1084c7f48175a9cb4a", Date: "2022-08-04T15:41:37.567Z", facilityId: "62e5a9fd45f2646fc7361fa3", userId: "62e16d390f4685e4fdb6a288", formData: { Date: "2022-08-04T15:41:37.567Z", TestOne: 60002, TestTwo: 19998, TestThree: 102, TestFour: "True" }, }, { _id: "62ec2f1c84c7f48175a9cb58", Date: "2022-08-04T15:41:52.932Z", facilityId: "62e5a9fd45f2646fc7361fa3", userId: "62e16d390f4685e4fdb6a288", formData: { Date: "2022-08-04T15:41:52.932Z", TestOne: 60003, TestTwo: 19997, TestThree: 103, TestFour: "True" }, }, ]

Quiero crear una función que tome data.formData y filtre cualquier clave que no esté incluida en filterData . Estoy teniendo dificultades para averiguar qué es exactamente lo que se necesita hacer para lograr esto. Si alguien pudiera ayudar a la identificación, se lo agradecería mucho.

---- EDITAR ---- Aquí hay algo de un proceso en el que he pensado pero devuelve errores y realmente no puedo pensar por qué.

 const formObject = datas.length > 0 && datas.map((data, i) => { const filterData = ['TestOne', 'TestTwo'] filterData.map((filter) => { delete data.formData[filter] }) })

Esta función me da errores de Uncaught TypeError: Cannot delete property 'TestThree' of #<Object> , he intentado crear una nueva instancia de datos pero no funciona

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

0

Yo lo haría de esta manera:

 const result = data.map(x => { for (const [key, value] of Object.entries(x.formData)) { if (!filterData.includes(key)) { delete x.formData[key]; } } return x; })

Espero que esto ayude

about 4 years ago · Juan Pablo Isaza Report

0

Los aspectos más destacados de esta función son:

  • Antes del primer ciclo, la matriz se clona ✥ y luego se examina cada objeto para encontrar "formData" . Dado que se conocen las claves reales, asumo lógicamente que el objeto que las tiene también se conoce, de ahí la segunda path de parámetro.

    Object.keys(obj['formData']) = ["Date", "TestOne", "TestTwo", "TestThree", "TestFour"] :

    figura yo

     function filterData(array, path, ...keys) { let clone = structuredClone(array); for (let obj of clone) { Object.keys(obj[path]).flatMap(key => //... obj[path] = [ {{["formData"]}}... //... ["Date", "TestOne", "TestTwo", "TestThree", "TestFour"]
  • En el segundo ciclo, las claves del primer ciclo se comparan con el tercer parámetro ...keys , un parámetro de descanso que consta de una o más claves para filtrar. La condición if se ha invertido con ! operador:

    Figura II

     if (![...keys].includes(key)) { return []; } return delete obj[path][key];

✥ El TypeError suena como si el objeto estuviera congelado, por lo que al clonar la matriz puede trabajar libremente en el clon.

 const data = [{ _id: "62ec2f1084c7f48175a9cb4a", Date: "2022-08-04T15:41:37.567Z", facilityId: "62e5a9fd45f2646fc7361fa3", userId: "62e16d390f4685e4fdb6a288", formData: { Date: "2022-08-04T15:41:37.567Z", TestOne: 60002, TestTwo: 19998, TestThree: 102, TestFour: "True" } }, { _id: "62ec2f1c84c7f48175a9cb58", Date: "2022-08-04T15:41:52.932Z", facilityId: "62e5a9fd45f2646fc7361fa3", userId: "62e16d390f4685e4fdb6a288", formData: { Date: "2022-08-04T15:41:52.932Z", TestOne: 60003, TestTwo: 19997, TestThree: 103, TestFour: "True" } }]; /** * Find any given number of keys and remove them * @param {array<object>} array - An array of objects * @param {string} path - Name of the key if the target object is one * level down. (todo: recursive algorithm to dig deeper) * @param {string/array<string>} keys - List of keys to filter out * @return {array<object>} The array sans filtered keys */ function filterData(array, path, ...keys) { let clone = structuredClone(array); for (let obj of clone) { Object.keys(obj[path]).flatMap(key => { if (![...keys].includes(key)) { return []; } return delete obj[path][key]; }); } return clone; } let x = filterData(data, "formData", "Date", "TestFour"); console.log(x);

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!