javascript - 根据值类型 [数组或数字或字符串] 对 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)
推荐阅读
- javascript - Angular HttpInterceptor 未添加响应标头
- c# - 为什么 String.IndexofAny() 在 Framework 4.6 中与 .NET50 的工作方式不同
- java - 如何显示来自dB的动态图像并在jsp中显示它们?
- r - 如何不在 roxygen2 中导出 S4 类?
- python - AWS EMR:文件存在,但错误提示文件不存在
- android - 遇到奇怪的错误,EditText 文本在 recyclerView 滚动时自动填充
- css - 如何将动态内联样式设置为:在 vue 中的元素之后?
- python - 无法在 Android 手机中使用 cv2.VideoCapture(0) 打开相机
- algorithm - 如何将 2 的幂表示为递归函数
- node.js - 如何将非 www 重定向到 www 和 http 到 https?