1

Trying to sort the array of object, the property of the object contains alphanumeric values, Tried methods which didn't worked

test.sort((a,b)=> a.Code.localeCompare(b.Code)); test.sort((a,b)=> +a.Code- +b.Code);

let test = [{Code: '16', Color: "Red"}, {Code: '54', Color: "Yellow"}, {Code: '24', Color: "Yellow"}, {Code: '1600', Color: "Blue"}, {Code: '16a', Color: "Green"}, {Code: '22', Color: "Yellow"}, {Code: '23', Color: "Yellow"}]; test.sort((a,b) => a.Code.localeCompare(b.Code)); console.log(test);

getting output as

[{"Code": "16", "Color": "Red" }, {"Code": "1600","Color": "Blue"}, {"Code": "16a","Color": "Green"}, {"Code": "22","Color": "Yellow"}, {"Code": "23","Color": "Yellow"}, {"Code": "24","Color": "Yellow"}, {"Code": "54","Color": "Yellow"}] 

How I can get the Expected output as

[{"Code": "16", "Color": "Red" }, {"Code": "22","Color": "Yellow"}, {"Code": "23","Color": "Yellow"}, {"Code": "24","Color": "Yellow"}, {"Code": "54","Color": "Yellow"}, {"Code": "1600","Color": "Blue"}, {"Code": "16a","Color": "Green"}] 
1
  • where you copied this a.Code.localeCompare(b.Code)); may they also said how it worksCommentedFeb 10, 2022 at 10:10

3 Answers 3

1

You could check for numbers and move number to top and sort by numbers or by string.

let test = [{ Code: '16', Color: "Red" }, { Code: '54', Color: "Yellow" }, { Code: '24', Color: "Yellow" }, { Code: '1600', Color: "Blue" }, { Code: '16a', Color: "Green" }, { Code: '22', Color: "Yellow" }, { Code: '23', Color: "Yellow" }]; test.sort(({ Code: a }, { Code: b }) => isFinite(b) - isFinite(a) || a - b || a.localeCompare(b) ); console.log(test);
.as-console-wrapper { max-height: 100% !important; top: 0; }

    0

    Try something as follows;

    test.sort(a,b) => a.Code.localeCompare(b.Code, 'en', { numeric: true });

    There is other possible solution if the above does not work as you expect.

    Ref: Sort mixed alpha/numeric array

      0

      Thanks Nina a slight modification done to the solution as typescript was restricting typecasting

      let test = [{ Code: '16', Color: "Red" }, { Code: '54', Color: "Yellow" }, { Code: '24', Color: "Yellow" }, { Code: '1600', Color: "Blue" }, { Code: '16a', Color: "Green" }, { Code: '22', Color: "Yellow" }, { Code: '23', Color: "Yellow" }]; test.sort(({ Code: a }, { Code: b }) => +isFinite(+b) - +isFinite(+a) || +a - +b || a.localeCompare(b) ); console.log(test);

        Start asking to get answers

        Find the answer to your question by asking.

        Ask question

        Explore related questions

        See similar questions with these tags.