按键值递归对 JavaScript 对象进行排序

ksr*_*r89 7 javascript sorting recursion node.js

按其值也是对象的键对对象进行排序,并对内部对象进行排序,即递归地对对象进行排序。排序应该按照键进行。

我研究了 Stackoverflow 的其他问题,但没有一个是针对对象递归排序的。

我调查的问题:

按属性值对 JavaScript 对象进行排序

例子:

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"
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

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"
    }
}
Run Code Online (Sandbox Code Playgroud)

不一定是2 级对象层次结构,它可能包含需要排序的n 级对象层次结构。

Gau*_*nan 7

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

以下功能应该可以工作,我想这就是您正在寻找的功能。

 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
}
Run Code Online (Sandbox Code Playgroud)