Home >Web Front-end >JS Tutorial >How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?

How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 21:11:03870browse

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:

  1. Tokenize Strings:

    • This function Tokenizes the input strings, separating numbers from characters. Tokens are stored as pairs in an array, where the first element is the number (or Infinity if no number), and the second element is the non-numeric characters.
  2. Comparison Loop:

    • It enters a loop that iterates over the tokens of the two input strings.
    • In each iteration, it compares the first element (number) or the second element (characters) of the token pairs.
    • If one is greater, the function returns the comparison result (positive for a, negative for b). If they are equal, it continues to the next pair.
  3. Handling Unequal Token Length:

    • If there are still elements in one of the tokens arrays, their length difference is returned as the comparison result.

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 &amp;&amp; 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn