Home >Web Front-end >JS Tutorial >How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?
Natural Sorting of Array Elements (String with Numbers)
Sorting an array of strings that contain numbers in a meaningful way can be challenging. Sorting them lexicographically often results in an unexpected order. To achieve the desired "natural sort" order, we can use the following approach:
Solution:
The provided JavaScript function uses a custom compare function called naturalCompare. Here's how it works:
Tokenize Strings:
Comparison Loop:
Handling Unequal Token Length:
Example:
Here's an example of using this approach to sort the array:
<br>function naturalCompare(a, b) {</p> <pre class="brush:php;toolbar:false">// Tokenization var ax = [], bx = []; a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity, || ""]) }); b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity, || ""]) }); // Comparison while(ax.length && bx.length) { var an = ax.shift(); var bn = bx.shift(); var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]); if(nn) return nn; } // Handling unequal length return ax.length - bx.length;
}
// Sorting test array
let arr = ["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob says hello"];
arr.sort(naturalCompare);
console.log(arr);
Output:
[
"IL0 Foo",
"IL3 Bob says hello",
"IL10 Baz",
"PI0 Bar"
]
The above is the detailed content of How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?. For more information, please follow other related articles on the PHP Chinese website!