Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按键值递归排序JavaScript对象_Javascript_Node.js_Sorting_Recursion - Fatal编程技术网

按键值递归排序JavaScript对象

按键值递归排序JavaScript对象,javascript,node.js,sorting,recursion,Javascript,Node.js,Sorting,Recursion,按值也是对象的键对对象进行排序,并对内部对象进行排序,即对对象进行递归排序。排序应按键进行 我研究了Stackoverflow的其他问题,但没有一个是针对对象递归排序的 我研究的问题: 示例: input = { "Memo": { "itemAmount1": "5", "taxName1": "TAX", "productPrice1": "10", "accountName1": "Account Receivabl

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

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

我研究的问题:

示例:

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级对象层次结构它可能包含需要排序的n级对象层次结构。

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

下面的函数应该可以工作,我想这就是您正在寻找的

 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
}
输入={
“备忘录”:{
“itemAmount1”:“5”,
“税名1”:“税”,
“产品价格1”:“10”,
accountName1:“应收账款(债务人)”
},
“页脚”:{
“产品描述2”:“玛姬”,
“项目数量2”:“49.5”,
“会计名称2”:“应收账款(债务人)”,
“税名2”:“税”
},
“标题”:{
“项目折扣3”:“10”,
“会计名称3”:“应收账款(债务人)”,
“产品价格3”:“10”,
“税名3”:“税”
}
}
window.sortedObject=排序(输入);
函数排序(对象){
if(typeof object!=“object”| | object instanceof Array)//不对数组排序
返回对象;
var keys=Object.keys(Object);
keys.sort();
var newObject={};
对于(变量i=0;i
我认为@ksr89的意思是,当我们应用for-in循环时,我们会按排序顺序获取密钥。我认为这是一个有效的用例,尤其是在开发基于Node.js的ORMs时

下面的函数应该可以工作,我想这就是您正在寻找的

 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
}
输入={
“备忘录”:{
“itemAmount1”:“5”,
“税名1”:“税”,
“产品价格1”:“10”,
accountName1:“应收账款(债务人)”
},
“页脚”:{
“产品描述2”:“玛姬”,
“项目数量2”:“49.5”,
“会计名称2”:“应收账款(债务人)”,
“税名2”:“税”
},
“标题”:{
“项目折扣3”:“10”,
“会计名称3”:“应收账款(债务人)”,
“产品价格3”:“10”,
“税名3”:“税”
}
}
window.sortedObject=排序(输入);
函数排序(对象){
if(typeof object!=“object”| | object instanceof Array)//不对数组排序
返回对象;
var keys=Object.keys(Object);
keys.sort();
var newObject={};
对于(变量i=0;i
上述解决方案仅适用于node.js的当前实现细节

用于
迭代的

也就是说,我能想到的唯一解决方案是使用数组作为支持,对对象的
属性进行排序并对其进行迭代:

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]);
}
var-keys=Object.keys(对象);
keys.sort();
对于(变量i=0;i
上述解决方案仅适用于node.js的当前实现细节

用于
迭代的

也就是说,我能想到的唯一解决方案是使用数组作为支持,对对象的
属性进行排序并对其进行迭代:

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]);
}
var-keys=Object.keys(对象);
keys.sort();
对于(变量i=0;i
我在这一页上写了以下信息。代码基于Gaurav Ramanan的答案,但处理数组和null的方式不同

比较JSON 要比较JSON文件中的数据,您可能需要以相同的方式对其进行格式化

  • 来自javascript:
    JSON.stringify(JSON.parse(jsonString),null,'\t')
    最后一个参数也可以是多个空格 最后2个参数是可选的(如果没有,则缩小输出)
  • 来自VisualStudio代码:带有Prettify JSON扩展
验证缩进(即制表符)和行尾(即Unix)。 此外,在格式化期间,键可以递归排序

使用javascript对键进行排序:

const{isArray}=Array
常量{keys}=Object
功能sortKeysRec(obj){
if(isArray(obj)){
常量newArray=[]
for(设i=0,l=obj.length;i

使用javascript确保unix行结尾:
jsonString.replace(/\r\n/ug,'\n')

我在本页上写了以下信息。代码基于Gaurav Ramanan的答案,但处理数组和null的方式不同

比较JSON 要比较JSON文件中的数据,您可能需要以相同的方式对其进行格式化

  • 来自javascript:
    JSON.stringify(JSON.parse(jsonString),null,'\t')
    最后一个参数也可以是多个空格 最后2个参数是可选的(如果没有,则缩小输出)
  • 来自VisualStudio代码:带有Prettify JSON扩展
验证缩进(即制表符)和行尾(即Unix)。 还有,克