首页 > 解决方案 > 对对象进行排序,同时保持相同的数据结构

问题描述

我想按时间戳对以下结构中接收的一些数据进行排序:

{
  art_AYNgc8KwfbewFawAsogtH1Eii5eu7kKfjM3CrEpFhzWY: [
    timestamp: '1613713166629',
    art_type: 'Type: image/jpeg - Size: 6442.15 Ko - Dimensions: 4000 x 6000 px',
    art_name: 'Name 1',
  ],
  art_FJPKZQKfkfzNnF6AZRiayzVdKEyCg3ZJc4Kb6hTEZMUH: [
    timestamp: '1613868065000',
    art_type: 'Type: image/png - Size: 8475.15 Ko - Dimensions: 3000 x 2000 px',
    art_name: 'Name 2',
  ],
  art_HNXph9RtNC9MT7oK2oCvVboyEUUf8bKQLvhQbpyVRbKR: [
    timestamp: '1613799567000',
    art_type: 'Type: image/jpg - Size: 3475.15 Ko - Dimensions: 1500 x 1000 px',
    art_name: 'Name 3'
  ]
}

但是在结果中保持完全相同的数据结构(具有键值的对象)。

我尝试了以下方法:

let sortedData = Object.values(entryData ).sort(function(a,b){
  return new Date(b.timestamp) - new Date(a.timestamp);
});

问题是我得到了不同的结构(数组与对象):

[
  [
    timestamp: '1613713166629',
    art_type: 'Type: image/jpeg - Size: 6442.15 Ko - Dimensions: 4000 x 6000 px',
    art_name: 'Name 1',
  ],
  [
    timestamp: '1613799567000',
    art_type: 'Type: image/jpg - Size: 3475.15 Ko - Dimensions: 1500 x 1000 px',
    art_name: 'Name 3'
  ],
  [
    timestamp: '1613868065000',
    art_type: 'Type: image/png - Size: 8475.15 Ko - Dimensions: 3000 x 2000 px',
    art_name: 'Name 2',
  ]
]

预先感谢您的帮助。

标签: javascriptarrayssortingobject

解决方案


不能对 JS 对象内的属性进行排序/重新排列

要让它有顺序,你必须使用某种数组,或者使用JS 的 Map 对象,或者重建一个对象,这样可以保持插入顺序。

所以你需要使用上述方法之一,有秩序,也许用它来映射到你的原始对象。或者您也可以只保留数组或 Map 对象中的所有数据,而忽略原始数据对象。


推荐阅读