Esto me está volviendo loco.

Suponiendo que tengo esto:

var tags = ["art","wedding"];
var containers = ["artcon","weddingcon"];
var limits = [5,15];

¿Cómo puedo crear este tipo de matriz multinivel como esta estructura?

var testarr = [
    "art" = [
        "container" = "artcon",
        "limit" = 5,
    ],
    "wedding" = [
       "container" = "weddingcon",
       "limit" = 15,
    ]
];

Saludos.

2
Ron 13 may. 2016 a las 17:13

4 respuestas

La mejor respuesta

Puede usar Array#reduce y devolver objeto

var tags = ["art", "wedding"];
var containers = ["artcon", "weddingcon"];
var limits = [5, 15];

var result = tags.reduce((res, e, i) => {
  res[e] = {container: containers[i], limit: limits[i]}
  return res;
}, {})

console.log(result)
4
Nenad Vracar 13 may. 2016 a las 14:21
var tags = ["art","wedding"];
var containers = ["artcon","weddingcon"];
var limits = [5,15];

testarr = new Array();
    
for(i in tags){
   var obj = {};
   obj[tags[i]] = { container: containers[i], limit: limits[i] };
   testarr.push(obj)
}

console.log(testarr);
console.log(testarr[0]);
console.log(testarr[1]);

Resultado de la matriz:

[
    { "art": {
               "container": "artcon",
               "limit": 5,
             }
    },
    { "wedding": {
                  "container": "weddingcon",
                  "limit": 15,
                 }
    }
];

var tags = ["art","wedding"];
var containers = ["artcon","weddingcon"];
var limits = [5,15];

 testarr = new Array();
    for(i in tags){
       testarr.push({tag: tags[i], container: containers[i], limit: limits[i] })
    }

console.log(testarr);
console.log(testarr[0]);
console.log(testarr[1]);

Resultado de la matriz:

[
    { "tag": "art",
      "container": "artcon",
      "limit": 5
    },
    { "tag": "wedding",
      "container": "weddingcon",
      "limit": 15
    }
];
0
Luis Vasquez 13 may. 2016 a las 15:02
var testarr = {
    "art": {
        "container": "artcon",
        "limit": 5,
    },
    "wedding": {
        "container": "weddingcon",
        "limit": 15,
    }
};

Esta es una modificación bastante simple de la idea que tenía. Tome nota de cómo en la declaración de objetos, siempre usamos : en lugar de =. Además, la declaración de objeto utiliza llaves en lugar de corchetes.

¿Qué podemos hacer con este objeto? Podemos recorrerlo, aunque no bastante tan confiablemente como podemos hacerlo con una matriz. Por ejemplo, podemos hacer for (key in testarr), y el bucle se ejecutará dos veces, una con key siendo "art" y otra con "wedding". Hay algunas advertencias sobre esto ... pero en un caso de uso tan simple, probablemente estarás bien.

Sin embargo, avíseme si su pregunta era cómo convertir esos tres objetos a través del código en esa estructura de objetos, porque en este momento parece que le gustaría entender cómo los objetos o "matrices multinivel "trabajo en este caso.

0
aaronofleonard 13 may. 2016 a las 14:22

Solo necesita un bucle for

var tags = ["art","wedding"];
var containers = ["artcon","weddingcon"];
var limits = [5,15];
//
var obj =[];
for(i in tags){
    obj[tags[i]]=[containers[i],limits[i]];
}
console.log(obj);
//

Respuesta:

[art: Array[2], wedding: Array[2]]
art:Array[2]
 0:"artcon"
 1:5
length:2
wedding:Array[2]
 0:"weddingcon"
 1:15
length:2
1
miglio 13 may. 2016 a las 14:33