1

I'm sorting the keys in the object:

My object:

data = {AAA: 1, BBB: 2, CCC: 55, VVV: 33, FFF:44}

I'm using the following code to sort:

Object.fromEntries(Object.entries(data).sort(([,v1], [,v2]) => +v2 - +v1))

however it outputs:

{CCC: 55, FFF: 44, VVV: 33, BBB: 2, AAA: 1}

I want to sort the keys in the object which should result:

{AAA: 1, BBB: 2, CCC: 55, FFF: 44, VVV: 33}

and if I try to change the sorting order, still gives results based on the count and not based on the key:

Object.fromEntries(Object.entries(data).sort(([,v1], [,v2]) => +v1 - +v2))

how can I make the above code work for both sorting value and sorting keys of an object?

3 Answers 3

2

That is because you are sorting based on the value of the entries, not the key of the entries. Object.entries() returns a tuple in the following format: [key, value], yet you are only accessing and comparing the values as you are using [, v1] and [, v2]. Change these to [k1] and [k2] respectively (the name doesn't matter, it's the positional argument you're unpacking that matters).

Simply update your accessors to use the first entry in the tuple, which is the key, and use String.prototype.localeCompare:

Object.fromEntries(Object.entries(data).sort(([k1], [k2]) => k1.localeCompare(k2)))

See proof-of-concept below:

const data = {
  AAA: 1,
  BBB: 2,
  CCC: 55,
  VVV: 33,
  FFF: 44
};

console.log(Object.fromEntries(Object.entries(data).sort(([k1], [k2]) => k1.localeCompare(k2))));

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

Comments

1

const data = {
  AAA: 1,
  BBB: 2,
  CCC: 55,
  VVV: 33,
  FFF: 44
};

console.log(Object.fromEntries(Object.entries(data).sort(([k1], [k2]) => k1.localeCompare(k2))));

Comments

1

Can do it using reduce.

const data = {
  AAA: 1,
  BBB: 2,
  CCC: 55,
  VVV: 33,
  FFF: 44
};
const sorted = Object.keys(data)
  .sort()
  .reduce((obj, key) => {
    obj[key] = data[key];
    return obj;
  }, {});
console.log(sorted);

Comments

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.