按键值recursionsortingJavaScript对象

通过其值也是对象的键sorting对象,并对该内部对象进行sorting,即recursionsorting对象。 sorting应该按键。

我看着Stackoverflow的其他问题,但没有一个是对象recursionsorting

我看了一下问题:

通过属性值对JavaScript对象进行sorting

例:

input = { "Memo": { "itemAmount1": "5", "taxName1": "TAX", "productPrice1": "10", "accountName1": "Account Receivable (Debtors)" }, "Footer": { "productDescription2": "Maggie", "itemQuantity2": "49.5", "accountName2": "Account Receivable (Debtors)", "taxName2": "TAX" }, "Header": { "itemDiscount3": "10", "accountName3": "Account Receivable (Debtors)", "productPrice3": "10", "taxName3": "TAX" } } 

产量

 output = { "Footer": { "accountName2": "Account Receivable (Debtors)", "itemQuantity2": "49.5", "productDescription2": "Maggie", "taxName2": "TAX" }, "Header": { "accountName3": "Account Receivable (Debtors)", "itemDiscount3": "10", "productPrice3": "10", "taxName3": "TAX" }, "Memo": { "accountName1": "Account Receivable (Debtors)", "itemAmount1": "5", "productPrice1": "10", "taxName1": "TAX" } } 

不需要它是2级对象层次结构,它可以包含需要sorting的n级对象层次结构

我认为@ ksr89的意思是,当我们应用一个for-in循环时,我们按sorting顺序得到键。 我认为这是一个有效的用例,特别是在基于Node.js的ORM开发中

以下function应该工作,我想你在找什么。

  input = { "Memo": { "itemAmount1": "5", "taxName1": "TAX", "productPrice1": "10", "accountName1": "Account Receivable (Debtors)" }, "Footer": { "productDescription2": "Maggie", "itemQuantity2": "49.5", "accountName2": "Account Receivable (Debtors)", "taxName2": "TAX" }, "Header": { "itemDiscount3": "10", "accountName3": "Account Receivable (Debtors)", "productPrice3": "10", "taxName3": "TAX" } } window.sortedObject = sort(input); function sort(object){ if (typeof object != "object" || object instanceof Array) // Not to sort the array return object; var keys = Object.keys(object); keys.sort(); var newObject = {}; for (var i = 0; i < keys.length; i++){ newObject[keys[i]] = sort(object[keys[i]]) } return newObject; } for (var key in sortedObject){ console.log (key); //Prints keys in order } 

上面的解决scheme仅适用于node.js的当前实现细节。

ECMAScript标准并不保证 keys迭代的顺序 。

说我能想到的唯一解决scheme是使用一个数组作为支持对对象的properties进行sorting并对其进行迭代:

 var keys = Object.keys(object); keys.sort(); for (var i = 0; i < keys.length; i++){ // this won't break if someone change NodeJS or Chrome implementation console.log(keys[i]); }