按键值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]); }