2017-08-24 6 views
0

J'essaie de changer l'ordre des propriétés ou des clés d'un objet selon une certaine définition. Ce que je trouve c'est que bien que les changements restent dans la fonction, ils sont retournés à l'extérieur. J'ai écrit un code simple pour montrer:Modifier l'ordre des clés/propriétés d'un objet dans une fonction en javascript?

function changeOrder(obj) { 
    let keys = Object.keys(obj); 
    let reversedObj = new Object; 
    for (let key = keys.length; key >0; key--) { 
     reversedObj[keys[key-1]] = obj[keys[key - 1]]; 
    } 
    console.log("revered object: "); console.log(reversedObj) 
    obj = reversedObj; 
    console.log("reversing original object: ");console.log(obj) 
    } 
a = { u: { x: 1, y: 2}, v : { x: 3, y: 4} } 
changeOrder(a); 
console.log("original object outside function: "); 
console.log(a) 

Ceci est le résultat je reçois:

revered object: 
Object { v: Object, u: Object } 
reversing original object: 
Object { v: Object, u: Object } 
original object outside function: 
Object { u: Object, v: Object } 

J'ai vérifié que toutes les modifications que j'ai fait sur une propriété de la reversedObj dans la fonction sont reproduites sur la objet à l'extérieur. Mais pourquoi l'ordre n'est-il pas maintenu?

Répondre

-1

Un objet dans javascript ne garantit pas la commande selon la spécification ECMAScript.

Toutefois, vous pouvez convertir l'objet javascript sous la forme d'un fichier json avec des clés ordonnées.

S'il vous plaît passer par cet exemple:

JSON.stringify(obj, keysInOrder);

ici, obj est l'objet javascript pour être de chaîne de caractères. keysInOrder est un tableau contenant la liste des clés à inclure dans le résultat, dans son ordre.

+0

Merci. Votre solution fonctionne mais j'ai trouvé une autre solution de contournement. J'ai trouvé que vous pouvez gérer le reveresedObj si vous le renvoyez et l'assignez à l'objet original, c'est-à-dire obj = changeOrder (obj) – amp