【问题标题】: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。
  • 无法对对象进行排序。只有数组可以。
  • 无法保证对象顺序,您希望如何排序?

标签: javascript jquery arrays json sorting


【解决方案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"}
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 2011-07-01
      • 2019-06-25
      • 2022-01-01
      • 1970-01-01
      • 2021-09-19
      • 2012-04-04
      相关资源
      最近更新 更多