基于值类型[数组,数字或字符串]对JSON对象进行排序



我以以下格式从服务器接收JSON对象:

obj = {
    field1: "ONE",
    field2: "TWO",
    field3: [THREE1,THREE2,THREE3]
    field4: "FOUR",
    field5: [FIVE1,FIVE2,FIVE3]
};

即使我以顺序发送对象,底部的数组和对象顶部的字符串,但我没有以顺序的形式接收。有什么方法可以按以下格式对此进行排序。

obj = {
    field1: "ONE",
    field2: "TWO",
    field4: "FOUR",
    field3: [THREE1,THREE2,THREE3],
    field5: [FIVE1,FIVE2,FIVE3]
};

目前,我正在使用以下方法及其工作,但可能有更好的方法。

obj = {
    field1: "ONE",
    field2: "TWO",
    field3: [THREE1,THREE2,THREE3]
    field4: "FOUR",
    field5: [FIVE1,FIVE2,FIVE3]
};
var strObj = {};
var arrObj = {};
Object.keys(obj).forEach(function(key) {
  console.table("Key : " + key + ", Value : " + obj[key]);
  if (!(obj[key] instanceof Array)) {
    strObj[key] = obj[key];
  }
});
Object.keys(obj).forEach(function(key) {
  console.table("Key : " + key + ", Value : " + obj[key]);
  if (obj[key] instanceof Array) {
    arrObj[key] = obj[key];
  }
});
obj = { ...strObj, ...arrObj };
console.log(obj);`

您可以根据该值是否为数组来sort对象的entries。然后使用Object.fromEntries()从排序的条目

创建一个新对象

const obj = {
  field1: "ONE",
  field2: "TWO",
  field3: ["THREE1", "THREE2", "THREE3"],
  field4: "FOUR",
  field5: ["FIVE1", "FIVE2", "FIVE3"]
};
const sortedEntries = Object.entries(obj)
                      .sort((a, b) => Array.isArray(a[1]) - Array.isArray(b[1]));
                      
const newObj = Object.fromEntries(sortedEntries)
console.log(newObj)

最新更新