首页 > 解决方案 > 根据两个键对数组中的对象进行排序

问题描述

我有一个如下所示的 JavaScript 数组,我正在尝试根据 Ptr 和 Outputs 对元素进行排序。正确的顺序是:(节点 0 -> 节点 2 -> 节点 1)。一个元素的输出应该与下一个元素的 Ptr 相同。我不确定如何在 JS 中执行此操作,因为我是该语言的新手。

nodeObjs = [{
  Node: '0',
  Id: '8057358647298',
  Ptr: '2454369535744',
  Outputs: '2454369536096',
  Type: 'SrcStream',
  NodeDetails: 'MediaType=[FrameSize=8246337209332 (1920,1012),BitRate=3733169,Compressed=1,MajorType={73646976-0000-0010-8000-00AA00389B71},Stride=0,Rotation=0,FrameRate=42949672960397843 (10000000,397843),PixelAspectRatio=4294967297 (1,1),InterlacedMode=7,Subtype={34363248-0000-0010-8000-00AA00389B71}]'
},
{
  Node: '1',
  Id: '8057358647297',
  Ptr: '2454369537680',
  Outputs: '',
  Type: 'Out',
  NodeDetails: 'MediaType=[FrameSize=8246337209332 (1920,1012),BitRate=3733169,Compressed=0,MajorType={73646976-0000-0010-8000-00AA00389B71},Stride=1920,Rotation=0,FrameRate=42949672960397843 (10000000,397843),PixelAspectRatio=4294967297 (1,1),InterlacedMode=7,Subtype={3231564E-0000-0010-8000-00AA00389B71}]'
},
{
  Node: '2',
  Id: '8057358647303',
  Ptr: '2454369536096',
  Outputs: '2454369537680',
  Type: 'Trnsfrm',
  NodeDetails: 'CLSID={62CE7E72-4C71-4D20-B15D-452831A87D9D},HWMFT=0,InputType=[FrameSize=8246337209332 (1920,1012),BitRate=3733169,Compressed=1,MajorType={73646976-0000-0010-8000-00AA00389B71},Stride=0,Rotation=0,FrameRate=42949672960397843 (10000000,397843),PixelAspectRatio=4294967297 (1,1),InterlacedMode=7,Subtype={34363248-0000-0010-8000-00AA00389B71}],OutputType=[FrameSize=8246337209332 (1920,1012),BitRate=3733169,Compressed=0,MajorType={73646976-0000-0010-8000-00AA00389B71},Stride=1920,Rotation=0,FrameRate=42949672960397843 (10000000,397843),PixelAspectRatio=4294967297 (1,1),InterlacedMode=7,Subtype={3231564E-0000-0010-8000-00AA00389B71}]'
}]

标签: javascriptarraystypescriptsorting

解决方案


使用 ES6:

nodeObjs.sort(function(a, b) {
    return a.Outputs.localeCompare(b.Ptr) && b.Node - a.Node;
}).reverse()

推荐阅读