首页 > 解决方案 > 根据值类型 [数组或数字或字符串] 对 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);`

标签: javascriptjsonsorting

解决方案


您可以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)


推荐阅读