2011-07-24 8 views
18

¿Cómo puedo cambiar el nombre de la clave en una matriz de objetos?¿Cambiar el nombre de la clave en una matriz de objetos?

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}]; 

¿Cómo puedo cambiar cada key1stroke a fin de que me sale:

var arrayObj = [{stroke:'value1', key2:'value2'},{stroke:'value1', key2:'value2'}]; 

Respuesta

22
var i; 
for(i = 0; i < arrayObj.length; i++){ 
    arrayObj[i].stroke = arrayObj[i]['key1']; 
    delete arrayObj[i].key1; 
} 
+0

Puedes verlo aquí: http://jsfiddle.net/Paulpro/XVxvy/2/ Alerta "indefinido" y luego "value1" – Paulpro

+0

Gracias por la solución, pero ¿qué ocurre si el objeto está con la tecla dinámica? como: var arrayObj = [{abcKey, 'value1', acdKey: 'value2', defKey: 'value3', cfgKey: 'value4'}]; – Dhaval

3
function changeKey(originalKey, newKey, arr) 
{ 
    var newArr = []; 
    for(var i = 0; i < arr.length; i++) 
    { 
    var obj = arr[i]; 
    obj[newKey] = obj[originalKey]; 
    delete(obj[originalKey]); 
    newArr.push(obj); 
    } 
    return newArr; 
} 
2

no cambiar un nombre de clave. Puede asignar un nuevo nombre/valor de clave y luego eliminar la clave anterior si lo desea. En su ejemplo:

var arrayObj = [{key1,'value1', key2:'value2'},{key1,'value1', key2:'value2'}]; 
var o = arrayObj[0]; // get first object 
var val = o.key1;  // get current value 
o.stroke = val;  // assign to new key 
delete o.key1;   // remove previous key 

si se quería hacer eso por todos los objetos de la matriz principal, se acaba de poner esto en un bucle que itera sobre el contenido de la matriz. He puesto más tareas intermedias aquí de las necesarias solo para documentar lo que está sucediendo.

O una versión abreviada en un bucle:

for (var i = 0; i < arrayObj.length; i++) { 
    var o = arrayObj[i]; 
    o.stroke = o.key1; 
    delete o.key1; 
} 
12

No se puede cambiar un nombre de propiedad, hay que añadir el valor con un nuevo nombre y borrar la antigua propiedad:

for (var i = 0; i < arrayObj.length; i++) { 
    arrayObj[i].stroke = arrayObj[i].key1; 
    delete arrayObj[i].key1; 
} 
+0

¿Todas las versiones del navegador aceptan 'eliminar'? –

+0

Sí, es parte del lenguaje Javascript. – Guffa

+0

Ok, por alguna razón, pensé que no era compatible con algunas versiones de IE o algo así. –

Cuestiones relacionadas