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