首页 > web前端 > js教程 > 提供的 JavaScript 函数如何实现包含数字的字符串数组的自然排序?

提供的 JavaScript 函数如何实现包含数字的字符串数组的自然排序?

Susan Sarandon
发布: 2024-11-11 21:11:03
原创
877 人浏览过

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

数组元素的自然排序(带有数字的字符串)

以有意义的方式对包含数字的字符串数组进行排序可能具有挑战性。按字典顺序对它们进行排序通常会导致意想不到的顺序。为了实现所需的“自然排序”顺序,我们可以使用以下方法:

解决方案:

提供的 JavaScript 函数使用名为 naturalCompare 的自定义比较函数。它的工作原理如下:

  1. 标记字符串:

    • 此函数对输入字符串进行标记,将数字与字符分开。令牌成对存储在数组中,其中第一个元素是数字(如果没有数字则为无穷大),第二个元素是非数字字符。
  2. 比较循环:

    • 它进入一个迭代令牌的循环两个输入字符串的。
    • 在每次迭代中,它都会比较标记对的第一个元素(数字)或第二个元素(字符)。
    • 如果其中一个更大,则函数返回比较结果(a 为正,b 为负)。如果相等,则继续到下一对。
  3. 处理不相等的令牌长度:

    • 如果有仍然是标记数组之一中的元素,它们的长度差作为比较返回

示例:

以下是使用此方法对数组进行排序的示例:

< ;pre>
函数naturalCompare(a, b) {

// 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;
登录后复制

}

//排序测试数组
let arr = ["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob said你好"];
arr.sort(naturalCompare);
console.log(arr);

输出:

[
“IL0 Foo”,
“IL3 鲍勃说你好",
"IL10 Baz",
"PI0 酒吧"
]

以上是提供的 JavaScript 函数如何实现包含数字的字符串数组的自然排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板