如何通过嵌套键对对象的对象进行排序

Posted

技术标签:

【中文标题】如何通过嵌套键对对象的对象进行排序【英文标题】:How to sort object of objects by nested key 【发布时间】:2019-05-13 05:32:15 【问题描述】:

我有一个对象。我想根据id对其进行排序。

这是我的数据


  1918: 
    id: "1544596802835",
    item_id: "1918",
    label: "Soft Touch  Salt Free Mint 500 ml (000001400045)",
    combo_items: false
  

  6325: 
    id: "15445968134652",
    item_id: "6325",
    label: "Mirindas Orange Flover 300 ml (012000800160)",
    combo_items: false
  

  6336: 
    id: "15445968106815",
    item_id: "6336",
    label: "Sting Energy 250ml (012000034220)",
    combo_items: false
  

  6498: 
    id: "1544596806967",
    item_id: "6498",
    label: "Tido Candy (01)",
    combo_items: false
  

  7461: 
    id: "15445968057103",
    item_id: "7461",
    label: "Skin Whitening Facial Kit (000051032012)",
    combo_items: false
  

【问题讨论】:

到目前为止你尝试了什么? 其实这是一个对象字面量,不是 JSON 实际上,这是一个无效的对象字面量,而不是 JSON。 无法对对象进行排序。只有数组可以。 无法保证对象顺序,您希望如何排序? 【参考方案1】:

首先,您不应该依赖 javascript 对象中的属性顺序(详见this question),这意味着您需要将对象排序到数组中。

这可以使用Array.prototype.sort()轻松完成:

const sorted = Object.values(data).sort((a, b) => a.id - b.id);

完成sn-p:

const data = 
  1918: 
    id: "1544596802835",
    item_id: "1918",
    label: "Soft Touch  Salt Free Mint 500 ml (000001400045)",
    combo_items: false
  ,
  6325: 
    id: "15445968134652",
    item_id: "6325",
    label: "Mirindas Orange Flover 300 ml (012000800160)",
    combo_items: false
  ,
  6336: 
    id: "15445968106815",
    item_id: "6336",
    label: "Sting Energy 250ml (012000034220)",
    combo_items: false
  ,
  6498: 
    id: "1544596806967",
    item_id: "6498",
    label: "Tido Candy (01)",
    combo_items: false
  ,
  7461: 
    id: "15445968057103",
    item_id: "7461",
    label: "Skin Whitening Facial Kit (000051032012)",
    combo_items: false
  
;

const sorted = Object.values(data).sort((a, b) => a.id - b.id);

console.log(sorted);

(我修复了对象文字,因为它在属性之间缺少逗号)

【讨论】:

【参考方案2】:

你可以试试!

function sort(data) 

   return Object.keys(data)
   .sort().reduce((a, b) => 
   a[b] = data[b];
   return a; , );


const object = 9:"Name 9", 10:"Name 10", 2:"Name 2", 5:"Name 5", 3:"Name 3";
var sortObject = sort(abject);

结果是

sortObject = 2: "Name 2", 3: "Name 3", 5: "Name 5", 9: "Name 9", 10: "Name 10"

【讨论】:

以上是关于如何通过嵌套键对对象的对象进行排序的主要内容,如果未能解决你的问题,请参考以下文章

通过具有日期值的单个键对对象数组进行排序

在 PHP 中按整数键对对象进行排序

如何使用对象的键对对象数组进行排序? [复制]

如何通过 orderBy 对嵌套的 Linq 对象进行排序

如何通过嵌套对象属性对 JavaScript 对象数组进行排序?

使用字典中的键对对象数组进行排序