-1

I want to sort the following json object in javascript by the "orderby" key (see second json object for the output I require):

{
  "1": {
    "category": "Year",
    "value": "2028",
    "title": "Current Year",
    "description": "",
    "orderby": "3"
  },
  "2": {
    "category": "Year",
    "value": "2038",
    "title": "First Year",
    "description": "",
    "orderby": "4"
  },
  "3": {
    "category": "Year",
    "value": "2016",
    "title": "Base Year",
    "description": "",
    "orderby": "1"
  },
  "4": {
    "category": "Year",
    "value": "2018",
    "title": "Previous Year",
    "description": "",
    "orderby": "2"
  }
}

Output required:

{
  "3": {
    "category": "Year",
    "value": "2016",
    "title": "Base Year",
    "description": "",
    "orderby": "1"
  },
  "4": {
    "category": "Year",
    "value": "2018",
    "title": "Previous Year",
    "description": "",
    "orderby": "2"
  },
  "1": {
    "category": "Year",
    "value": "2028",
    "title": "Current Year",
    "description": "",
    "orderby": "3"
  },
  "2": {
    "category": "Year",
    "value": "2038",
    "title": "First Year",
    "description": "",
    "orderby": "4"
  }
}
Genspec
  • 2,279
  • 2
  • 14
  • 10
  • Not possible unless you're prepared to manually create that JSON output. Historically JavaScript properties did not have a defined order. The order has since been defined, but the logic is complex and there are a lot of edge cases. One of those edge cases is that numeric keys are sorted numerically. – Robby Cornelissen May 30 '22 at 06:21
  • Does this answer your question? [Sorting object property by values](https://stackoverflow.com/questions/1069666/sorting-object-property-by-values) – Xupitan May 30 '22 at 06:51

1 Answers1

0

You can sort this array by using javascript sort function.

const data = {
  "1": {
    "category": "Year",
    "value": "2028",
    "title": "Current Year",
    "description": "",
    "orderby": "3"
  },
  "2": {
    "category": "Year",
    "value": "2038",
    "title": "First Year",
    "description": "",
    "orderby": "4"
  },
  "3": {
    "category": "Year",
    "value": "2016",
    "title": "Base Year",
    "description": "",
    "orderby": "1"
  },
  "4": {
    "category": "Year",
    "value": "2018",
    "title": "Previous Year",
    "description": "",
    "orderby": "2"
  }
}
Object.keys(data).sort((a, b) => data[a].orderby - data[b].orderby).map(f => data[f])
Qubaish Bhatti
  • 700
  • 5
  • 22