Sorting Arrays of Strings
In JavaScript arrays have a sort( ) method that sorts the array items into an alphabetical order.
The following illustrates the syntax of the sort( )method:
Array.sort([comparer])
The sort( ) method accepts an optional argument which is a function that compares two elements of the array.
If the compare function is omitted, then the sort( ) method will sort the element based on the elements values.
Elements values rules:
1.If compare (a,b) is less than zero, the sort( ) method sorts a to a lower index than b. In other words, a will come first.
2.If compare (a,b) is greater than zero, the sort( ) method sort b to a lower index than a, i.e., b will come first.
3.If compare (a,b) returns zero, the sort ( ) method considers a equals b and leaves their positions unchanged.
Also, note that the sort( ) method accepts two arguments and will return a value that determines the sort order, the following represents the syntax:
function compare (a, b) {
/ …
}
Note: Remember that a function can be named as you want, but try to make the name meaningful to what you are trying to said through that function for an easy reference.
Sorting Arrays of Strings
Let's practice with an array of string named animals, as follows:
var animals = [
'cat', 'dog', 'elephant', 'bee', 'ant'
];
To sort the elements of the animals array in ascending order alphabetically, we need to use the sort( ) method without passing the compare function as in the example:
animals.sort();
console.log(animals);
// ["ant", "bee", "cat", "dog", "elephant"]
To sort the animals array in descending order, you will need to change the logic of the compare function and pass it to the sort( ) method as the following example.
// descending order
animals.sort(function (a, b) {
if (a > b) {
return -1;
}
if (b > a) {
return 1;
}
return 0;
});
console.log(animals);
// ["elephant", "dog", "cat", "bee", "ant"]
Of course, this is only a tiny piece of sorting array elements because we can use the sort( ) method also to sort by upper and lower case, numbers, and objects by property.
Oldest comments (10)
There's a big caveat to this method of string sorting: it doesn't take Unicode and non-English alphabets into account. Depending on your application, you might want to consider using the
String::localeCompare()
instead which has built-in support for things like language-specific sort ordering, ignoring cases or diacritics:Love this reply. It's exactly what I was looking for. I do want to comment that there is a typo in case someone else tries to use this like I did and it didnt work. In the localeSort variable assignment it should be
return a.localeCompare(b, 'en', { sensitivity: 'base' });
Thanks! both anwser are awesome!
thank you.
thanks!
I know it is an extension of the topic... How can I add an argument to the callback-function? I want to sort Objects according to their properties.
example of not working dummy code:
var sortprop='weight';
animals.sort(function (a, b, sortprop){....});
Use a compare closure function.
thank you.
why this code not work?
作者:xgqfrms
链接:cnblogs.com/xgqfrms/p/18195429
来源:cnblogs.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
©xgqfrms 2012-2024
cnblogs.com 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!