2017-08-24 10 views
0

私はオブジェクトのプロパティまたはキーの順序をいくつかの定義に従って変更しようとしています。私が見つけたのは、変更が機能内に残っていても、それらは外に戻っているということです。私はこれを表示するために簡単なコードを書いた: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) 

これは私が得る結果である:

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

私は関数内私はreversedObjの任意のプロパティに行った変更が上に複製されていることを確認し外部のオブジェクト。しかし、なぜ注文が維持されていないのですか?

答えて

-1

JavaScriptのオブジェクトは、ECMAScriptの仕様に従った順序を保証しません。

ただし、javascriptオブジェクトは、順序付けされたキーを使用して文字列化されたjsonとして変換できます。

この例を行ってください:ここ

JSON.stringify(obj, keysInOrder);

は、objが文字列化するjavascriptオブジェクトです。 keysInOrderは、結果に含まれるキーのリストをその順序で含む配列です。

+0

ありがとうございました。あなたのソリューションは動作しますが、別の回避策が見つかりました。 obj = changeOrder(obj)を返すと、それを元のオブジェクトに代入すると、あなたがreveresedObjを維持できることがわかりました。 – amp

関連する問題