1

Buen dia, estoy tratando de crear un nuevo array con los atributos de cada uno de los siguientes objetos :

 function findElementsByKey() {

                   var array = {
                    "soccer" :"Soccer", 
                    "golf" :"Golf PGA", 
                    "tennis" :"Tennis Tour"
                   }
                   var array2 = {
                    "ball" :"soccer", 
                    "ball" :"golf", 
                    "racket" :"tennis", 
                    "gloves" :"soccer"
                   }                 
                   var label = Object.keys(array)
                   var llaves = Object.values(array2);

No tengo idea cual es la mejor opcion para que se agrupen los elementos dependiendo de su atriubuto con javascript

ejemplo de respuesta

[["Soccer","ball","gloves"], 
 ["Golf PGA","ball"], 
 ["Tennis Tour","racket"]]

agradezco sus opinines y sugerencias!

Rubén
  • 10,857
  • 6
  • 35
  • 79
Sebas Carrillo
  • 348
  • 2
  • 11
  • Osea, lo que necesitas es obtener los datos que hay dentro de cada propiedad comparandolos con otro objeto?, es decir, los que existan en el primero filtrarlos en el segundo y obtener un nuevo objeto con cada uno de sus valores basado en que las propiedades del primero existan en el segundo??, o en forma de array??. – Riven Sep 28 '19 at 14:32
  • No está claro lo que se está preguntando. ¿Cuáles son los criterios de agrupación? Por otro lado, no es bueno que uses como nombre de variables términos que son tan similares a los tipos de datos en particular si el objeto asignado no corresponde al tipo de dato (estas asignando objetos a las variables `array` y `array2`) – Rubén Sep 28 '19 at 22:06
  • Relacionado: [Todo en JavaScript es un objeto ¿cierto o falso?](https://es.stackoverflow.com/q/85853/65) – Rubén Sep 28 '19 at 22:08

1 Answers1

1

Esos arrays no son en verdad arrays, son objetos literares, y tampoco son válidos, las propiedades no se pueden repetir en los objetos. De cualquier manera modifico la propiedad repetida (ball) y agrego un ejemplo de una posible solución usando dos for..in anidados:

const obj1 = {
  "soccer": "Soccer",
  "golf": "Golf PGA",
  "tennis": "Tennis Tour"
}
const obj2 = {
  "ball": "soccer",
  "ball2": "golf",
  "racket": "tennis",
  "gloves": "soccer"
}

const res = [];

for (let p1 in obj1) {
  let arr = [obj1[p1]];
  for (let p2 in obj2) {
    if(obj2[p2] === p1){      
      arr.push(p2);
    }
  }
  res.push(arr);
}

console.log(res);

Cómo se necesita acceder tanto a las claves cómo a los valores, me parece más apropiado hacerlo iterando sobre los objetos, en lugar de iterar sobre las claves o los valores, pero también se puede hacer.

const obj1 = {
  "soccer": "Soccer",
  "golf": "Golf PGA",
  "tennis": "Tennis Tour"
}
const obj2 = {
  "ball": "soccer",
  "ball2": "golf",
  "racket": "tennis",
  "gloves": "soccer"
}

const res = Object.keys(obj1).map(d=>{
  let arr = [obj1[d]];
  Object.keys(obj2).forEach(e=>{
    if(obj2[e] === d){
      arr.push(e);
    }
  });
  return arr;
})

console.log(res);
Emeeus
  • 7,104
  • 8
  • 25