1

0: Object { gradeName: "A+", gradeMaxMarks: "89", gradeMinMarks: "80" }
​
1: Object { gradeName: "A", gradeMaxMarks: "79", gradeMinMarks: "70" }
​
2: Object { gradeName: "B+", gradeMaxMarks: "69", gradeMinMarks: "60" }
​
3: Object { gradeName: "B", gradeMaxMarks: "59", gradeMinMarks: "55" }
​
4: Object { gradeName: "C", gradeMaxMarks: "49", gradeMinMarks: "40" }
​
5: Object { gradeName: "D", gradeMaxMarks: "39", gradeMinMarks: "30" }
​
6: Object { gradeName: "A++", gradeMaxMarks: "100", gradeMinMarks: "90" }
​
length: 7

I have above object in JavaScript, it is not sorting properly. How can I resolve this?

Albert Einstein
  • 7,472
  • 8
  • 36
  • 71

3 Answers3

0

var arr = [{
    gradeName: "A+",
    gradeMaxMarks: "89",
    gradeMinMarks: "80"
  },
  {
    gradeName: "A",
    gradeMaxMarks: "79",
    gradeMinMarks: "70"
  },
  {
    gradeName: "B+",
    gradeMaxMarks: "69",
    gradeMinMarks: "60"
  },
  {
    gradeName: "B",
    gradeMaxMarks: "59",
    gradeMinMarks: "55"
  },
  {
    gradeName: "C",
    gradeMaxMarks: "49",
    gradeMinMarks: "40"
  },
  {
    gradeName: "D",
    gradeMaxMarks: "39",
    gradeMinMarks: "30"
  },
  {
    gradeName: "A++",
    gradeMaxMarks: "100",
    gradeMinMarks: "90"
  }
]

arr.sort((a,b) => Number(b.gradeMaxMarks)-Number(a.gradeMaxMarks))
console.log(arr)
sridhar..
  • 1,945
  • 15
  • 19
  • In A++ gradeMaxMarks is 100. All other marks will have only 2 digits only. While sorting it will consider 100 as 10, I mean only first 2 digits it is considering – Sharath kumar Apr 09 '18 at 05:48
0

It looks like you forgot the sort part of the script.

const input = [{
    gradeName: "A+",
    gradeMaxMarks: "89",
    gradeMinMarks: "80"
  },
  {
    gradeName: "A",
    gradeMaxMarks: "79",
    gradeMinMarks: "70"
  },
  {
    gradeName: "B+",
    gradeMaxMarks: "69",
    gradeMinMarks: "60"
  },
  {
    gradeName: "B",
    gradeMaxMarks: "59",
    gradeMinMarks: "55"
  },
  {
    gradeName: "C",
    gradeMaxMarks: "49",
    gradeMinMarks: "40"
  },
  {
    gradeName: "D",
    gradeMaxMarks: "39",
    gradeMinMarks: "30"
  },
  {
    gradeName: "A++",
    gradeMaxMarks: "100",
    gradeMinMarks: "90"
  }
];

input.sort((a, b) => b.gradeMaxMarks - a.gradeMaxMarks);
console.log(input);
CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
  • In A++ gradeMaxMarks is 100. All other marks will have only 2 digits only. While sorting it will consider 100 as 10, I mean only first 2 digits it is considering – Sharath kumar Apr 09 '18 at 05:48
0

Use Javascript's Array.sort() method to sort array in Descending Order [100, 80, 60, 40, ....] (Your requirement) like below:

array.sort(function(a, b) {
  return b.gradeMaxMarks - a.gradeMaxMarks;
});

If you want to sort array in Ascending Order [10, 20, 40, 45, 60, ....] then do it like this:

array.sort(function(a, b) {
  return a.gradeMaxMarks - b.gradeMaxMarks;
});

Below is working code snippet:

var array = [{gradeName:"A+",gradeMaxMarks:"89",gradeMinMarks:"80"},{gradeName:"A",gradeMaxMarks:"79",gradeMinMarks:"70"},{gradeName:"B+",gradeMaxMarks:"69",gradeMinMarks:"60"},{gradeName:"B",gradeMaxMarks:"59",gradeMinMarks:"55"},{gradeName:"C",gradeMaxMarks:"49",gradeMinMarks:"40"},{gradeName:"D",gradeMaxMarks:"39",gradeMinMarks:"30"},{gradeName:"A++",gradeMaxMarks:"100",gradeMinMarks:"90"}];

array.sort(function(a, b) {
  return b.gradeMaxMarks - a.gradeMaxMarks;
});

console.log(array)
Vikasdeep Singh
  • 20,983
  • 15
  • 78
  • 104