0

I got this array of objects that I want to sort by key from a0

  const items = [
    { key: "a2", value: 37 },
    { key: "b2", value: 37 },
    { key: "b0", value: -12 },
    { key: "a4", value: 21 },
    { key: "a21", value: 21 },
    { key: "a8", value: 21 },
    { key: "a5", value: 21 },
    { key: "a3", value: 45 },
    { key: "b1", value: 13 },
    { key: "a1", value: 21 },
    { key: "a0", value: 21 },
    { key: "a9", value: 21 },
    { key: "a20", value: 21 },
    { key: "a7", value: 21 },
    { key: "a10", value: 21 },
    { key: "a11", value: 21 },
    { key: "a12", value: 21 },
    { key: "a6", value: 21 },
    { key: "a19", value: 21 },
  ];

I want the new array to be:

  const items = [
    { key: "a0", value: 21 },
    { key: "a1", value: 21 },
    { key: "a2", value: 37 },
    { key: "a3", value: 45 },
    { key: "a4", value: 21 },
    { key: "a5", value: 21 },
    { key: "a6", value: 21 },
    { key: "a7", value: 21 },
    { key: "a8", value: 21 },
    { key: "a9", value: 21 },
    { key: "a10", value: 21 },
    { key: "a12", value: 21 },
    { key: "a19", value: 21 },
    { key: "a20", value: 21 },
    { key: "a21", value: 21 },
    { key: "b0", value: -12 },
    { key: "b1", value: 13 },
    { key: "b2", value: 37 },
  ];

I tried with this code but with no success:

  items.sort((a, b) => a.key - b.key);

  // sort by key
  items.sort((a, b) => {
    const keyA = a.key.toUpperCase();
    const keyB = b.key.toUpperCase(); 
    if (keyA < keyB) {
      return -1;
    }
    if (keyA > keyB) {
      return 1;
    }
    return 0;
  });

  console.log(items);

Which gives med the following output but the keys are not in proper order. I want them to be from a0, a1, a2, a3 and so on. Not a10 as position 3. How can I accomplish this?

{key: 'a0', value: 21}
{key: 'a1', value: 21}
{key: 'a10', value: 21}
{key: 'a11', value: 21}
{key: 'a12', value: 21}
{key: 'a19', value: 21}
{key: 'a2', value: 37}
{key: 'a20', value: 21}
{key: 'a21', value: 21}
{key: 'a3', value: 45}
{key: 'a4', value: 21}
{key: 'a5', value: 21}
{key: 'a6', value: 21}
{key: 'a7', value: 21}
{key: 'a8', value: 21}
{key: 'a9', value: 21}
{key: 'b0', value: -12}
{key: 'b1', value: 13}
{key: 'b2', value: 37}
acroscene
  • 845
  • 4
  • 16
  • 45
  • also [localeCompare for Natural Sort?](https://stackoverflow.com/questions/66136638/localecompare-for-natural-sort) – pilchard Oct 17 '22 at 20:50

0 Answers0