2012-04-17 29 views

Respuesta

14

Desde su comentario,

por ejemplo como éstas fallar por las claves internas { "name": "John", "Edad": "21", "sexo" : "masculino", "lugar": {"estado": "ca"}}

Es posible que tenga que recurrir en tales casos. Véase más adelante,

DEMO

var output = allKeysToUpperCase(obj); 

function allKeysToUpperCase(obj) { 
    var output = {}; 
    for (i in obj) { 
     if (Object.prototype.toString.apply(obj[i]) === '[object Object]') { 
      output[i.toUpperCase()] = allKeysToUpperCase(obj[i]); 
     } else { 
      output[i.toUpperCase()] = obj[i]; 
     } 
    } 
    return output; 
} 

salida

enter image description here


Un simple bucle debe hacer el truco,

DEMO

var output = {}; 
for (i in obj) { 
    output[i.toUpperCase()] = obj[i]; 
} 
+0

Tenga en cuenta que las teclas en minúsculas todavía están presentes –

+2

@Elvis Nope, estoy creando un nuevo objeto 'salida' –

+0

Vaya. Perdió que –

3

No se puede cambiar una clave directamente sobre un objeto dado, pero si desea realizar este cambio en el objeto original, puede guardar la nueva clave mayúsculas y eliminar el anterior:

function changeKeysToUpper(obj) { 
 
    var key, upKey; 
 
    for (key in obj) { 
 
     if (obj.hasOwnProperty(key)) { 
 
      upKey = key.toUpperCase(); 
 
      if (upKey !== key) { 
 
       obj[upKey] = obj[key]; 
 
       delete(obj[key]); 
 
      } 
 
      // recurse 
 
      if (typeof obj[upKey] === "object") { 
 
       changeKeysToUpper(obj[upKey]); 
 
      } 
 
     } 
 
    } 
 
    return obj; 
 
} 
 

 
var test = {"name": "john", "Age": "21", "sex": "male", "place": {"state": "ca"}, "family": [{child: "bob"}, {child: "jack"}]}; 
 

 
console.log(changeKeysToUpper(test));

FYI, esta función también protege de nuevo inadvertidamente modificar las propiedades o métodos enumerables heredados.

+0

Se agregó código para trabajar recursivamente y se agregó una demostración de fragmento de trabajo. – jfriend00

Cuestiones relacionadas