Foros del Web » Programando para Internet » Node.js »

Renombrar keys de varible

Estas en el tema de Renombrar keys de varible en el foro de Node.js en Foros del Web. Buenas a todos, no me gusta preguntar en los foros pero no me queda otra, llevo unos días ofuscado con este tema y espero que ...
  #1 (permalink)  
Antiguo 16/03/2017, 18:36
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Pregunta Renombrar keys de varible

Buenas a todos, no me gusta preguntar en los foros pero no me queda otra, llevo unos días ofuscado con este tema y espero que me podáis ayudar o arrojar un rallo de luz.

Os cuento, tras una consulta a una base de datos obtengo lo siguiente:

Código:
{
    "prod_format": "400 ml",
    "prod_brand": "Marca",
    "prod_image": "http://192.168.1.45/mini/1046332bb531ab3.jpg",
    "prod_name": "Gel de baño o ducha",
    "prod_pvp": 2.20,
    "prod_shops": [
      {
        "prod_price": 2.29,
        "prod_shop": {
          "prod_shopID": 2,
          "prod_shop_name": "Tienda",
          "prod_shop_image": "http://192.168.1.45/shops/d4d4sw2.jpg"
        }
      },
      {
        "prod_price": 2.19,
        "prod_shop": {
          "prod_shopID": 5,
          "prod_shop_name": "Tienda",
          "prod_shop_image": "http://192.168.1.45/shops/g4hbe72.jpg"
        }
      }
    ] 
}
Y lo que quiero es quitar los prefijos que tienen los datos originales prod_ y shop_

No me vale hacer una equivalencia a mano, ya que estos datos no son siempre fijos para algunos productos hay datos extra, además usaría esa función para "limpiar" otras consultas obtenidas de la base de datos.

Hasta ahora he probado lo siguiente:
  1. Usar función recursiva -> Descartado, en otros lenguajes de programación funcionaría pero en NodeJS no, ya que es asíncrono, lo único que consigo es entrar en un bucle infinito
  2. Intentar buscar una función de mapeo de variable y adaptarla -> Descartado ya que soy yo, que no se como buscar eso, solo he encontrado simples forEach que listan un array o todos los elementos de un objeto (he intentado aplicar esto de forma recurrente como digo en el punto 1, y no he obtenido resultados satisfactorios)
  3. Usar promises, era lo mas prometedor sobre el papel pero no encuentro ninguna manera de hacer que funcione bien, estoy teniendo muchos problemas, como por ejemplo llamar a un promise desde dentro de un promise entre otros, así que muy a mi pesar -> Descartado

Por si queda alguna duda estoy buscando una función a la que yo le pase la variable de arriba, unos prefijos, [prod_ , shop_] y me devuelta esto.

Código:
{
    "format": "400 ml",
    "brand": "Marca",
    "image": "http://192.168.1.45/mini/1046332bb531ab3.jpg",
    "name": "Gel de baño o ducha",
    "pvp": 2.20,
    "shops": [
      {
        "price": 2.29,
        "shop": {
          "shopID": 2,
          "name": "Tienda",
          "image": "http://192.168.1.45/shops/d4d4sw2.jpg"
        }
      },
      {
        "price": 2.19,
        "shop": {
          "shopID": 5,
          "name": "Tienda",
          "image": "http://192.168.1.45/shops/g4hbe72.jpg"
        }
      }
    ] 
}
PD: No, no puedo editar el nombre de las keys del original, es la información que me viene del motor de búsqueda.


Muchas gracias de antemano, espero que alguien pueda ayudarme, un saludo.
  #2 (permalink)  
Antiguo 13/04/2017, 13:45
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 11 meses
Puntos: 22
Respuesta: Renombrar keys de varible

No se si llegue un poco tarde, pero aquí te dejo este pedazo de código que te puede ser utíl.

Código Javascript:
Ver original
  1. function replace(obj) {
  2.   var newObj = {};
  3.   for(key in obj) {
  4.     var newKey = key.split('prod_').join('').split('shop_').join('');
  5.  
  6.     if (typeof(obj[key]) == 'object') {
  7.       newObj[newKey]=replace(obj[key]);
  8.     } else {
  9.       newObj[newKey]=obj[key];
  10.     }
  11.   }
  12.   return newObj;
  13. }
  14.  
  15. var obj = {
  16.     "prod_format": "400 ml",
  17.     "prod_brand": "Marca",
  18.     "prod_image": "http://192.168.1.45/mini/1046332bb531ab3.jpg",
  19.     "prod_name": "Gel de baño o ducha",
  20.     "prod_pvp": 2.20,
  21.     "prod_shops": [
  22.       {
  23.         "prod_price": 2.29,
  24.         "prod_shop": {
  25.           "prod_shopID": 2,
  26.           "prod_shop_name": "Tienda",
  27.           "prod_shop_image": "http://192.168.1.45/shops/d4d4sw2.jpg"
  28.         }
  29.       },
  30.       {
  31.         "prod_price": 2.19,
  32.         "prod_shop": {
  33.           "prod_shopID": 5,
  34.           "prod_shop_name": "Tienda",
  35.           "prod_shop_image": "http://192.168.1.45/shops/g4hbe72.jpg"
  36.         }
  37.       }
  38.     ]
  39. }
  40.  
  41. console.log(replace(obj));

Etiquetas: keys, renombrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:14.