0

If I have the object,

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };

I want to compare object values, and sort them in a numerical order.

Therefore, I tried

let answer = Object.keys(obj);

answer.sort((a,b) => {
  return obj[b] - obj[a];
})

The output is ['Peter', 'Jeremy', 'Adam', 'Chris'].

I want to sort Jeremy and Adam in Alphabetical order as they have same values.

The output I want is ['Peter', 'Adam', 'Jeremy', 'Chris']

How do I approach to this answer?

2

2 Answers 2

2

you can use a condition for case where values are same to sort based on alphabetical order of keys

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };

let answer = Object.keys(obj);

answer.sort((a,b) => {
    if (obj[b] == obj[a]) return a.localeCompare(b)
    return obj[b] - obj[a];
})

console.log(answer)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

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

Comments

1

const obj = { Peter: 3, Jeremy: 2, Chris: 1, Adam: 2 };

const result = Object.entries(obj) // get array of [key, value]
  // sort by value descending, then alphabetically by key
  .sort(([a,b],[c,d])=>d-b || a.localeCompare(c)) 
  .map(([i])=>i) // extract just the key

console.log(result)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.