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

308
Vistas
Javascript, filtrado de objetos en comparación con la matriz

Todavía estoy aprendiendo y el otro día tuve una pregunta sobre cómo filtrar dos matrices, ¡lo que me ayudó mucho a comprender!

Sin embargo, ahora tengo un nuevo problema ya que la complejidad ha crecido un poco de ser dos matrices simples. Ahora, en cambio, tengo una matriz con múltiples objetos llamados animales que clasifica a los animales en función de si son mascotas, insectos o animales salvajes y cada uno contiene un objeto con sus características. Ahora quiero comparar esto en una matriz simple que se ve a continuación.

Matriz con objeto

 let animals = [ { "housePets" : [ { "name": "Cat", "food" : "Fish", "description": "Long tail, sharp claws" }, { "name": "Dog", "food" : "Biscuits", "description" : "Humans best friend" } ] }, { "wildAnimals" : [ { "name": "Giraffe", "food" : "Leafes", "description" : "A very long neck" }, { "name": "Lion", "food" : "Meat", "description" : "Featured in Lion King" } ] }, { "insects" : [ { "name": "Ladybug", "food" : "Leafes", "description" : "Red and black" }, { "name": "Spider", "food" : "Flies", "description" : "From the friendly neighbourhood" } ] }]

Arr:

 let animalsArr2 = [housePets]

Tengo algunos problemas para comprender completamente cómo trabajar con este formato JSON en general. La mayor lucha para mí es apuntar a la matriz específica como wildAnimals.

Por ejemplo, una cosa que quiero hacer es filtrar la matriz de animales en función de lo que hay dentro de animalesArr2 y elegir uno aleatorio de animalesarr que no aparezca en animalesArr2 como "animales salvajes" e "insectos". Espero que alguien pueda darme algunas ideas sobre cómo abordar este problema o si se puede abordar de una manera más fácil.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede probar de esta manera simple usando Array.find() junto con los métodos Array.some() .

Demostración de trabajo:

 let animals = [{ "housePets": [ { "name": "Cat", "food" : "Fish", "description": "Long tail, sharp claws" }, { "name": "Dog", "food" : "Biscuits", "description" : "Humans best friend" }] }, { "wildAnimals": [ { "name": "Giraffe", "food" : "Leafes", "description" : "A very long neck" }, { "name": "Lion", "food" : "Meat", "description" : "Featured in Lion King" }] }, { "insects": [ { "name": "Ladybug", "food" : "Leafes", "description" : "Red and black" }, { "name": "Spider", "food" : "Flies", "description" : "From the friendly neighbourhood" }] }]; let animalsArr2 = ['housePets']; const res = animals.find((obj) => animalsArr2.some((elem) => Object.keys(obj).includes(elem))); console.log(res);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar el método de matriz .find() para devolver la lista que desea. Por ejemplo, si desea devolver la lista de animales salvajes:

 let animals = [ { "housePets" : [ { "name": "Cat", "food" : "Fish", "description": "Long tail, sharp claws" }, { "name": "Dog", "food" : "Biscuits", "description" : "Humans best friend" } ] }, { "wildAnimals" : [ { "name": "Giraffe", "food" : "Leafes", "description" : "A very long neck" }, { "name": "Lion", "food" : "Meat", "description" : "Featured in Lion King" } ] }, { "insects" : [ { "name": "Ladybug", "food" : "Leafes", "description" : "Red and black" }, { "name": "Spider", "food" : "Flies", "description" : "From the friendly neighbourhood" } ] } ]; const wildAnimals = animals.find((item) => item.wildAnimals);

El código anterior básicamente verifica qué elemento de su matriz tiene una propiedad llamada wildAnimals y devuelve ese elemento. Puedes leer más sobre este método aquí .

¡Espero que haya ayudado!

about 4 years ago · Juan Pablo Isaza Denunciar

0

Voy a suponer que se ve obligado a usar este formato de almacenamiento de datos, pero siento que debo informarle que esta no es la mejor manera de almacenar información como esta (verá que es difícil trabajar con él). eso). En lugar de tener una matriz de objetos, podría tener un objeto de matrices como este:

 let animals = { "housePets": [{ "name": "Cat", "food": "Fish", "description": "Long tail, sharp claws" }, { "name": "Dog", "food": "Biscuits", "description": "Humans best friend" }], "wildAnimals": [{ "name": "Giraffe", "food": "Leafes", "description": "A very long neck" }, { "name": "Lion", "food": "Meat", "description": "Featured in Lion King" }] }

Con este enfoque, obtener todos los animales de la casa sería tan fácil como animals.housePets .
Volviendo a tu problema aunque. Si desea obtener todos los animales domésticos de esto, deberá filtrar la matriz . Para filtrar matrices, debe darle una condición que el elemento debe pasar para ser almacenado. Aquí puede ver que solo el objeto con los animales de la casa tiene una propiedad housePets , por lo que podemos aprovechar eso:

 let house_animals = animals.filter(obj => obj.housePets)[0].housePets; // [{ "name": "Cat", "food": "Fish", "description": "Long tail, sharp claws" }, { "name": "Dog", "food": "Biscuits", "description": "Humans best friend" }]

Lo que hace es que toma todos los objetos que tienen la propiedad "housePets", toma el primero (supongo que siempre habrá uno) y lee la propiedad, dándote la variedad de animales.
Para encontrar animales que solo están en la sección housePets y no en otras, puedes hacer esto:

 let house_animals = animals.filter(obj => obj.housePets)[0].housePets; let wild_animals = animals.filter(obj => obj.wildAnimals)[0].wildAnimals; let insects = animals.filter(obj => obj.insects)[0].insects; let only_house = house_animals.filter(animal => !wild_animals.includes(animal) && !insects.includes(animal); // This checks if the animal is in the wild_animals or insects array. If it isn't, it keeps it.

También puedes consultar esta pregunta
Espero que esto haya ayudado :)

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