数组排序系列(6)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taller_2000/article/details/83021255

JavaScript排序法 - 字符排序

使用JS进行字符排序,比数字排序更简单。

function sortarr(para)
	{
		arr=para.split(',');
		arr.sort	();
		return arr;
	}

JS代码解析:
第4行代码调用数组的Sort方法,无需任何参数。


接下来在VBA中调用JS代码。

Sub JSSortText_ASC()
    Dim astrData As Variant
    Dim strName As String
    Dim objJS As Object
    Dim strSortedName  As String
    astrData = Array("Mike", "Tim", "Jane", "Jim", "Alex", "Helen", "Jessica", "Julie", "Chris", "Rick")
    strName = Join(astrData, ",")
    Debug.Print "Original Data: " & strName
    Set objJS = CreateObject("msscriptcontrol.scriptcontrol")
    objJS.Language = "javascript"
    objJS.addcode "function sortarr(para){arr=para.split(',');arr.sort();return arr;}"
    strSortedName = objJS.eval("sortarr('" & strName & "')")
    Debug.Print "After Sort(ASC): " & strSortedName
End Sub

运行代码结果如下。

Original Data: Mike,Tim,Jane,Jim,Alex,Helen,Jessica,Julie,Chris,Rick
After Sort(ASC): Alex,Chris,Helen,Jane,Jessica,Jim,Julie,Mike,Rick,Tim


如果需要实现字符降序排序,只需要略微修改JS代码。

Sub JSSortText_DSC()
    Dim astrData As Variant
    Dim strName As String
    Dim objJS As Object
    Dim strSortedName  As String
    astrData = Array("Mike", "Tim", "Jane", "Jim", "Alex", "Helen", "Jessica", "Julie", "Chris", "Rick")
    strName = Join(astrData, ",")
    Debug.Print "Original Data: " & strName
    Set objJS = CreateObject("msscriptcontrol.scriptcontrol")
    objJS.Language = "javascript"
    objJS.addcode "function sortarr(para){arr=para.split(',');arr.sort();arr.reverse();return arr;}"
    strSortedName = objJS.eval("sortarr('" & strName & "')")
    Debug.Print "After Sort(DSC): " & strSortedName
End Sub

运行代码结果如下。

Original Data: Mike,Tim,Jane,Jim,Alex,Helen,Jessica,Julie,Chris,Rick
After Sort(DSC): Tim,Rick,Mike,Julie,Jim,Jessica,Jane,Helen,Chris,Alex


相关文章链接:

数组排序系列(1)-- 冒泡法
数组排序系列(2)-- 极值法
数组排序系列(3)-- 工作表排序法
数组排序系列(4)-- JavaScript排序法(数字升序)
数组排序系列(5)-- JavaScript排序法(数字降序)
数组排序系列(6)-- JavaScript排序法(字符排序)

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/83021255