Javascript 使用嵌入键按特定数值对JSON排序

Javascript 使用嵌入键按特定数值对JSON排序,javascript,json,sorting,Javascript,Json,Sorting,我试图通过一些嵌套值从最高到最低对一些JSON进行排序。以以下对象为例: "videos": { "0": { "video_name": "Calls", "video_filename": "ALEXA_CALLS.mp4", "count": 1 }, "1": {

我试图通过一些嵌套值从最高到最低对一些JSON进行排序。以以下对象为例:

"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不能保证对象属性的顺序。所以在我看来,这样做可能是个坏主意。谢谢!!!!!!基本上不考虑插入顺序,因为键解析为整数。否则的话,情况就糟了。参考:谢谢!!!!!!基本上不考虑插入顺序,因为键解析为整数。否则的话,情况就糟了。参考: