2017-08-24 78 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