-1

If I had an array of numbers, I can quickly sort them using .sort() function like this:

let array = [1, 5, 3, 2, 9, 6];
let sortedArray = array.sort();

However, I am wondering if I can even use .sort() if my array is made up of objects who have a number property. For example, I'm wondering if I could turn this:

let array = [
    { name: "Random1", number: "1" },
    { name: "Random2", number: "5" },
    { name: "Random3", number: "3" },
    { name: "Random4", number: "2" },
    { name: "Random5", number: "9" },
    { name: "Random6", number: "6" },
]

Into this based on the value of the number property.

let array = [
    { name: "Random1", number: "1" },
    { name: "Random4", number: "2" },
    { name: "Random3", number: "3" },
    { name: "Random2", number: "5" },
    { name: "Random6", number: "6" },
    { name: "Random5", number: "9" },    
]
Onyx
  • 5,186
  • 8
  • 39
  • 86

3 Answers3

1

The sort method accepts a comparison function. You can read more about it here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

array.sort((first, second) => first.number - second.number);

kingkupps
  • 3,284
  • 2
  • 16
  • 28
1

You can do that by passing the compareFunction as the parameter to sort().

compareFunction | Optional

Specifies a function that defines the sort order. If omitted, the array elements are converted to strings, then sorted according to each character's Unicode code point value.

let array = [
    { name: "Random1", number: "1" },
    { name: "Random2", number: "5" },
    { name: "Random3", number: "3" },
    { name: "Random4", number: "2" },
    { name: "Random5", number: "9" },
    { name: "Random6", number: "6" },
]

array.sort((a, b) => (a.number > b.number) ? 1 : -1);
console.log(array);

If the number property is always number in the form of string then use the following:

array.sort((a, b) => a.number - b.number);
Mamun
  • 66,969
  • 9
  • 47
  • 59
  • May I ask what is the difference between your example, and dev_junwen's example? They're similar yet yours has an extra ternary if statement. – Onyx Feb 01 '20 at 05:16
  • @Bobimaru, the difference is for the type actually---string and number:) – Mamun Feb 01 '20 at 05:19
1

You can make use of the array sort function callback to compare the object property number.

const array = [
    { name: "Random1", number: "1" },
    { name: "Random2", number: "5" },
    { name: "Random3", number: "3" },
    { name: "Random4", number: "2" },
    { name: "Random5", number: "9" },
    { name: "Random6", number: "6" },
];

const sortedArray = array.sort((a, b) => a.number - b.number);
console.log(sortedArray);
junwen-k
  • 3,454
  • 1
  • 15
  • 28