array.slice(开始,结束)在 vbscript 中?

array.slice(start, end) in vbscript?

有人最喜欢标准的实现(例如 jscript,javascript)array.slicevbscript 中的(开始,结束)函数吗?

它似乎经常被遗漏(无论如何在 vbscript 程序员中),分享一个好的实现会有所帮助。如果没有出现,我想我将不得不回答我自己的问题并写点东西。

这是我过去用过的:

Function Slice(arr, starting, ending)

    Dim out_array

    If Right(TypeName(arr), 2) = "()" Then
        out_array = Array()
        ReDim Preserve out_array(ending - starting)
        For index = starting To ending
            out_array(index - starting) = arr(index)
        Next
    Else
        Exit Function
    End If

    Slice = out_array

End Function

为了完整性,这可能是一个更好的版本:

Function Slice (aInput, Byval aStart, Byval aEnd)
    If IsArray(aInput) Then
        Dim i
        Dim intStep
        Dim arrReturn
        If aStart < 0 Then
            aStart = aStart + Ubound(aInput) + 1
        End If
        If aEnd < 0 Then
            aEnd = aEnd + Ubound(aInput) + 1
        End If
        Redim arrReturn(Abs(aStart - aEnd))
        If aStart > aEnd Then
            intStep = -1
        Else
            intStep = 1
        End If
        For i = aStart To aEnd Step intStep
            If Isobject(aInput(i)) Then
                Set arrReturn(Abs(i-aStart)) = aInput(i)
            Else
                arrReturn(Abs(i-aStart)) = aInput(i)
            End If
        Next
        Slice = arrReturn
    Else
        Slice = Null
    End If
End Function

这避免了之前答案的一些问题:

  1. 不考虑数组中的对象
  2. 允许负开始值和结束值;他们从末尾倒数
  3. 如果 start 高于 end 给出一个反向数组子集
  4. 不需要(昂贵的)redim 保留,因为数组是空的
  5. 如果输入不是数组,则返回定义的结果(Null
  6. 在输入
  7. 上使用内置函数IsArray代替字符串manipulation/comparison