2011-08-05 14 views
5
var addObjectResponse = [{ 
    'DateTimeTaken': '/Date(1301494335000-0400)/', 
    'Weight': 100909.090909091, 
    'Height': 182.88, 
    'SPO2': '222.00000', 
    'BloodPressureSystolic': 120, 
    'BloodPressureDiastolic': 80, 
    'BloodPressurePosition': 'Standing', 
    'VitalSite': 'Popliteal', 
    'Laterality': 'Right', 
    'CuffSize': 'XL', 
    'HeartRate': 111, 
    'HeartRateRegularity': 'Regular', 
    'Resprate': 111,  
    'Temperature': 36.6666666666667, 
    'TemperatureMethod': 'Oral',  
    'HeadCircumference': '',  
}]; 

Este es un objeto de muestra que obtengo de back-end, ahora quiero cambiar el orden del objeto. No quiero ordenar por nombre o tamaño ... solo quiero cambiar manualmente el orden ...Cambiando el orden de las teclas Object ....

+0

que va a recibir un error con esa respuesta, porque 'HeadCircumference' : '', no debería tener la coma adicional –

+3

¿Desea cambiar el orden de los pares clave/valor? ¿Por qué? – alnorth29

+0

posible duplicado de [Orden de elementos - para (... en ...) bucle en javascript] (http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript) –

Respuesta

0

si desea reordenar manualmente. simplemente cree un nuevo objeto y asigne valores usando un objeto antiguo.

var newObject= [{ 
    'DateTimeTaken': addObjectResponse.DateTimeTaken, 
    'Weight': addObjectResponse.Weight, 
    'Height': addObjectResponse.Height, 
    'SPO2': addObjectResponse.SPO2 
}]; 
+11

Eso no tiene más orden que el objeto original. Las propiedades de objeto no tienen un orden de enumeración coherente en JavaScript. –

+3

Puede haber un caso de uso donde sea necesario, como representar un objeto con una biblioteca de plantillas – amigolargo

1

Creo que eso no es posible en JavaScript.

Puede crear una matriz que contendrá los nombres de campo en su orden y puede recorrer esta matriz y obtener los campos del objeto real.

+0

Istvan: lo hice, pero el valor ahora se reemplaza en diferente orden ... –

+0

@John: No entiendo su comentario . –

9

No puede solicitar pares de clave/valor de objeto JavaScript. Se almacena en su propio formato interno, por lo que nunca debe confiar en el orden de eso. En JS, todo es un Objeto, incluso una Matriz. Así que a veces se puede introducir errores cuando se utiliza la notación de matriz y la notación de objetos juntos (for x in var)

+2

si bien esto es cierto, esto no se parece al uso en el mundo real, donde las plantillas a menudo se representan mediante un bucle sobre las propiedades del objeto. Y cuando vuelves sobre ellos, tienen un orden. Alterar este orden es ... frágil, pero debe agregarse IMO. – ProblemsOfSumit

0

sólo se refiere a las claves de objeto en el orden que le gustaría:

aKeys = [ 
    addObjectResponse[0].DateTimeTaken, 
    addObjectResponse[0].Weight, 
    addObjectResponse[0].Height, 
    ...etc... 
] 
5

propiedades de un objeto en Javascript no tienen una orden. Puede parecer que hay un pedido en algunos navegadores, pero la especificación ECMAScript define el orden de enumeración de propiedades del objeto como específico de la implementación, por lo que no debe suponer que el comportamiento de un navegador sea el mismo que el de otro. Chrome, por ejemplo, no utiliza el mismo orden que otros navegadores: consulte this lengthy bug report para obtener al menos la mayor cantidad de comentarios sobre este tema que pueda desear.

Si necesita una orden específica, use una matriz o dos matrices (una para claves y otra para valores).

5

escribí este pequeño algoritmo que permite mover las teclas, es como jQuery .insertAfter() método. Usted tiene que proporcionar:

//currentKey: the key you want to move 
//afterKey: position to move-after the currentKey, null or '' if it must be in position [0] 
//obj: object 


function moveObjectElement(currentKey, afterKey, obj) { 
    var result = {}; 
    var val = obj[currentKey]; 
    delete obj[currentKey]; 
    var next = -1; 
    var i = 0; 
    if(typeof afterKey == 'undefined' || afterKey == null) afterKey = ''; 
    $.each(obj, function(k, v) { 
     if((afterKey == '' && i == 0) || next == 1) { 
      result[currentKey] = val; 
      next = 0; 
     } 
     if(k == afterKey) { next = 1; } 
     result[k] = v; 
     ++i; 
    }); 
    if(next == 1) { 
     result[currentKey] = val; 
    } 
    if(next !== -1) return result; else return obj; 
} 

Ejemplo:

var el = {a: 1, b: 3, c:8, d:2 } 
el = moveObjectElement('d', '', el); // {d,a,b,c} 
el = moveObjectElement('b', 'd', el); // {d,b,a,c} 
+0

Me gustan las personas que hacen que las cosas imposibles sean posibles. – ar2015

4

Usted puede utilizar Object.keys():

var obj = { 
    a: 1, 
    b: 2, 
    c: 4 
}; 

var new_obj = {}; 

Object.keys(obj) 
.sort(function(a, b) { 
    /** Insert your custom sorting function here */ 
    return a - b; 
}) 
.forEach(function(key) { 
    new_obj[key] = obj[key]; 
}); 

obj = new_obj; 
Cuestiones relacionadas