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?

8
  • looks like 0, then 1, then 2 ... all the waay to 6 (hard to read though) ... what order were you expecting? Commented Apr 9, 2018 at 4:51
  • I am sorting with gradeMaxMarks. Commented Apr 9, 2018 at 4:52
  • By which value you want to sort this array of objects? Commented Apr 9, 2018 at 4:52
  • no you aren't ... you have an array that is in the order you wrote it ... I see no attempt at sorting Commented Apr 9, 2018 at 4:53
  • 1
    yes, but you're not showing your sorting code - how can we help you fix that if you don't show it Commented Apr 9, 2018 at 5:00

3 Answers 3

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)

Sign up to request clarification or add additional context in comments.

8 Comments

This one is not working for my data. Actually i have my data stored in local storage. The value 100 for A++ is fixed.
@Sharathkumar what do you mean?
@Sharathkumar click on Run code snippet the blue Button to see the output
@Sharathkumar Edit your question to clarify it please.
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
|
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);

1 Comment

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
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)

1 Comment

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.