Javascript 使用嵌入键按特定数值对JSON排序
我试图通过一些嵌套值从最高到最低对一些JSON进行排序。以以下对象为例:Javascript 使用嵌入键按特定数值对JSON排序,javascript,json,sorting,Javascript,Json,Sorting,我试图通过一些嵌套值从最高到最低对一些JSON进行排序。以以下对象为例: "videos": { "0": { "video_name": "Calls", "video_filename": "ALEXA_CALLS.mp4", "count": 1 }, "1": {
"videos": {
"0": {
"video_name": "Calls",
"video_filename": "ALEXA_CALLS.mp4",
"count": 1
},
"1": {
"video_name": "Routines",
"video_filename": "ROUTINES.mp4",
"count": 3
},
"4": {
"video_name": "Photos",
"video_filename": "PHOTOS.mp4",
"count": 4
}
}
是否可以根据“计数值”对其进行排序,因此照片将是第一个属性,然后是例程等。排序如下:
"videos": {
"4": {
"video_name": "Photos",
"video_filename": "PHOTOS.mp4",
"count": 4
},
"1": {
"video_name": "Routines",
"video_filename": "ROUTINES.mp4",
"count": 3
},
"0": {
"video_name": "Calls",
"video_filename": "ALEXA_CALLS.mp4",
"count": 1
},
}
我从其他问题中看到,如果将json对象转换为数组并使用.sort执行某些操作,则可以对其进行排序,但数字0、1、4等可能会导致问题,因为我无法确定如何通用地引用整个对象。对于我正在做的其他事情,我需要做一些事情,比如视频[0]。视频名称
以前有人见过这样的吗?任何提示都很好
更新示例:
let v = {
"0": {
"video_name": "Calls",
"video_filename": "ALEXA_CALLS.mp4",
"count": 1
},
"1": {
"video_name": "Routines",
"video_filename": "ROUTINES.mp4",
"count": 3
},
"4": {
"video_name": "Photos",
"video_filename": "PHOTOS.mp4",
"count": 4
}
};
v.sort(function(a, b) {
return a.count > b.count;
});
console.log(v);
首先,您的数据不完全是JSON;它应该用另一组括号包装,如
{
"videos": {
"4": {
"video_name": "Photos",
"video_filename": "PHOTOS.mp4",
"count": 4
},
"1": {
"video_name": "Routines",
"video_filename": "ROUTINES.mp4",
"count": 3
},
"0": {
"video_name": "Calls",
"video_filename": "ALEXA_CALLS.mp4",
"count": 1
}
}
}
从那里,您可以解析它,获取值并通过
const data = JSON.parse(...)
Object.values(data.videos).sort((a,b) => a.count - b.count)
此外,还可以通过反转排序函数体来反转排序
(a,b) => b.count - a.count
首先,您的数据不完全是JSON;它应该用另一组括号包装,如
{
"videos": {
"4": {
"video_name": "Photos",
"video_filename": "PHOTOS.mp4",
"count": 4
},
"1": {
"video_name": "Routines",
"video_filename": "ROUTINES.mp4",
"count": 3
},
"0": {
"video_name": "Calls",
"video_filename": "ALEXA_CALLS.mp4",
"count": 1
}
}
}
从那里,您可以解析它,获取值并通过
const data = JSON.parse(...)
Object.values(data.videos).sort((a,b) => a.count - b.count)
此外,还可以通过反转排序函数体来反转排序
(a,b) => b.count - a.count
可以通过将其转换为数组来实现 常量对象={ 视频:{ 0: { 视频名称:呼叫, 视频文件名:ALEXA_CALLS.mp4, 计数:1 }, 1: { 视频名称:例程, 视频文件名:ROUTINES.mp4, 计数:3 }, 4: { 视频名称:照片, 视频文件名:PHOTOS.mp4, 计数:4 } } } const videos=obj.videos const videoArray=Object.entriesvideos.map[key,value]=>{…value,key:key} const sortedVideoArray=videoArray.sorta,b=>b.count-a.count
console.logsortedVideoArray您可以通过将其转换为数组来实现 常量对象={ 视频:{ 0: { 视频名称:呼叫, 视频文件名:ALEXA_CALLS.mp4, 计数:1 }, 1: { 视频名称:例程, 视频文件名:ROUTINES.mp4, 计数:3 }, 4: { 视频名称:照片, 视频文件名:PHOTOS.mp4, 计数:4 } } } const videos=obj.videos const videoArray=Object.entriesvideos.map[key,value]=>{…value,key:key} const sortedVideoArray=videoArray.sorta,b=>b.count-a.count
console.logsortedVideoArrayvideos是键/值系统的对象,不需要订单,这不是一个数组如果需要根据计数排序,则需要订单=>需要数组。因此,首先尝试将对象转换为数组,然后编写排序逻辑。可以通过对对象键进行排序,但由于这不是数组,因此排序不是超级相关的。如果转换为数组,引用整个对象时不一定会有任何问题。。。但如果您是,您能详细说明您所引用的那些特定问题吗?是的,尽管这是可能的,但JavaScript不能保证对象属性的顺序。因此,在我看来,这样做可能是个坏主意。视频是键/值系统的对象,不需要订单,这不是数组。如果需要根据计数对其进行排序,则需要订单=>需要数组。因此,首先尝试将对象转换为数组,然后编写排序逻辑。可以通过对对象键进行排序,但由于这不是数组,因此排序不是超级相关的。如果转换为数组,引用整个对象时不一定会有任何问题。。。但如果您是,您能详细说明您所引用的那些特定问题吗?是的,尽管这是可能的,但JavaScript不能保证对象属性的顺序。所以在我看来,这样做可能是个坏主意。谢谢!!!!!!基本上不考虑插入顺序,因为键解析为整数。否则的话,情况就糟了。参考:谢谢!!!!!!基本上不考虑插入顺序,因为键解析为整数。否则的话,情况就糟了。参考: