马黑黑 发表于 2022-6-20 08:00

JS数组排序的简单方法

<p>JavaScript中有一个 sort 函数,用于数组排序。它排序的效果差强人意,试看如下代码:<br><br></p>
<pre>&lt;script language=<span style="color: magenta">"javascript"</span>&gt;

<span style="color: blue">let</span> ar = ;

ar.sort();
console.table(<span style="color: magenta">'sort : '</span>,ar);

ar.sort(<span style="color: blue">function</span>(a,b) {
&nbsp; &nbsp;<span style="color: blue">return</span> a - b;
});</pre><pre>console.table(<span style="color: magenta">'sort fun : '</span>, ar);

&lt;/script&gt;
</pre>

<p><br>我们用了两种方法对数组 ar 进行排序,一个是直接使用 sort() 函数,另一个是在 sort() 函数中再使用一个函数对数组元素进行规则排序。结果如下图所示:</p><p><br></p><p></p><p>可以看到,sort函数直接使用,排序结果有问题,所以必须通过调用自定义函数的方式排序结果才能满意。原因在于,sort函数是针对英文字母进行排序的,对数字的排序很外行。</p><p><br></p><p>本例仅针对&nbsp;number&nbsp;类型的数组元素进行排序,针对文本元素的话,是英文的好办,直接用sort,是其他语言的文本,则需要其他的手段,但依然离不开sort函数。</p>

红影 发表于 2022-6-20 09:36

直接排序,数字30的位置不对了。
return a - b; 这个的含义是a到b吧,我的第一反应是减去{:4_173:}

红影 发表于 2022-6-20 09:38

“针对文本元素的话,是英文的好办,直接用sort,”

那它对英文的排序规则是什么,是26个字母的顺序?对单词也是这样?

红影 发表于 2022-6-20 09:39

这个好像是升序的排序,降序的也能排么?

樵歌 发表于 2022-6-20 11:37

站旁边喝彩{:4_174:}

马黑黑 发表于 2022-6-20 12:12

樵歌 发表于 2022-6-20 11:37
站旁边喝彩

蟹蟹

马黑黑 发表于 2022-6-20 12:15

红影 发表于 2022-6-20 09:36
直接排序,数字30的位置不对了。
return a - b; 这个的含义是a到b吧,我的第一反应是减去

你的第一反应是对的。a-b 这里是提供一个比较规则,两两相减,而后重排,实际上是调用sort函数内在的冒泡功能进行排序,我们就无需写一个冒泡程序了。

马黑黑 发表于 2022-6-20 12:17

红影 发表于 2022-6-20 09:38
“针对文本元素的话,是英文的好办,直接用sort,”

那它对英文的排序规则是什么,是26个字母的顺序?对 ...

是的。先按第一个字母排序,第一个字母相同的按第二个,依此类推

马黑黑 发表于 2022-6-20 12:20

红影 发表于 2022-6-20 09:39
这个好像是升序的排序,降序的也能排么?

a 代表上一个数组元素,b 代表数组相对于 a 的下一个元素,所以,降序的话,b-a 或 -(a-b)

红影 发表于 2022-6-20 14:10

马黑黑 发表于 2022-6-20 12:15
你的第一反应是对的。a-b 这里是提供一个比较规则,两两相减,而后重排,实际上是调用sort函数内在的冒泡 ...

啊,大小排列竟然要用到冒泡功能才能实现啊,怪不得你说它排序的效果差强人意{:4_173:}

红影 发表于 2022-6-20 14:11

马黑黑 发表于 2022-6-20 12:17
是的。先按第一个字母排序,第一个字母相同的按第二个,依此类推

哦哦。我倒是觉得这个还是对数字更有用点。

红影 发表于 2022-6-20 14:12

马黑黑 发表于 2022-6-20 12:20
a 代表上一个数组元素,b 代表数组相对于 a 的下一个元素,所以,降序的话,b-a 或 -(a-b)

也就是说,不能直接使用,还是需要这个函数在才行的吧。

马黑黑 发表于 2022-6-20 19:07

红影 发表于 2022-6-20 14:12
也就是说,不能直接使用,还是需要这个函数在才行的吧。

对,除非仅是英文排序

马黑黑 发表于 2022-6-20 19:08

红影 发表于 2022-6-20 14:11
哦哦。我倒是觉得这个还是对数字更有用点。

排序都有用。比如姓名排序,按读音排序的那种,还有我们的lrc转换,也需要用到排序功能

马黑黑 发表于 2022-6-20 19:08

红影 发表于 2022-6-20 14:10
啊,大小排列竟然要用到冒泡功能才能实现啊,怪不得你说它排序的效果差强人意

是的

红影 发表于 2022-6-21 16:32

马黑黑 发表于 2022-6-20 19:07
对,除非仅是英文排序

嗯嗯,知道了。

红影 发表于 2022-6-21 16:32

马黑黑 发表于 2022-6-20 19:08
排序都有用。比如姓名排序,按读音排序的那种,还有我们的lrc转换,也需要用到排序功能

就是那个有两排时间的那种吧{:4_173:}

马黑黑 发表于 2022-6-21 19:10

红影 发表于 2022-6-21 16:32
就是那个有两排时间的那种吧
对,有多个时间信息的歌词,它会分成若干句,所以必须排序

马黑黑 发表于 2022-6-21 19:10

红影 发表于 2022-6-21 16:32
嗯嗯,知道了。

挺好

樵歌 发表于 2022-6-21 19:38

马黑黑 发表于 2022-6-20 12:12
蟹蟹

横着走{:4_173:}
页: [1] 2
查看完整版本: JS数组排序的简单方法