vbscript中的array.slice(开始、结束)?

vbscript中的array.slice(开始、结束)?,vbscript,slice,Vbscript,Slice,有人喜欢vbscript中的标准(如jscript、javascript)array.slice(start、end)函数的实现吗 这似乎是vbscript程序员经常错过的,共享一个好的实现会有所帮助。如果没有人出现,我想我必须回答我自己的问题并写些东西。这是我过去使用过的一个: Function Slice(arr, starting, ending) Dim out_array If Right(TypeName(arr), 2) = "()" Then

有人喜欢vbscript中的标准(如jscript、javascript)array.slice(start、end)函数的实现吗


这似乎是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(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(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(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
函数片(aInput、Byval aStart、Byval aEnd)
如果是IsArray(aInput),那么
昏暗的我
暗步
暗棱返回
如果aStart<0,则
aStart=aStart+Ubound(aInput)+1
如果结束
如果aEnd<0,则
aEnd=aEnd+Ubound(输入)+1
如果结束
Redim arrReturn(Abs(aStart-aEnd))
如果aStart>aEnd,则
intStep=-1
其他的
intStep=1
如果结束
对于i=从开始到结束步骤intStep
如果是Isobject(aInput(i)),则
设置arrrurn(Abs(i-aStart))=aInput(i)
其他的
arrrurn(Abs(i-aStart))=aInput(i)
如果结束
下一个
切片=返回
其他的
切片=空
如果结束
端函数
这避免了前面答案中的一些问题:

  • 不考虑数组中的对象
  • 允许负的开始值和结束值;他们从最后开始倒数
  • 如果开始高于结束,则给出反向数组子集
  • 由于阵列为空,因此不需要(昂贵的)redim保留
  • 如果输入不是数组,则返回定义的结果(
    Null
  • 使用内置函数
    IsArray
    ,而不是对输入进行字符串操作/比较

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

    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
    
    函数片(aInput、Byval aStart、Byval aEnd)
    如果是IsArray(aInput),那么
    昏暗的我
    暗步
    暗棱返回
    如果aStart<0,则
    aStart=aStart+Ubound(aInput)+1
    如果结束
    如果aEnd<0,则
    aEnd=aEnd+Ubound(输入)+1
    如果结束
    Redim arrReturn(Abs(aStart-aEnd))
    如果aStart>aEnd,则
    intStep=-1
    其他的
    intStep=1
    如果结束
    对于i=从开始到结束步骤intStep
    如果是Isobject(aInput(i)),则
    设置arrrurn(Abs(i-aStart))=aInput(i)
    其他的
    arrrurn(Abs(i-aStart))=aInput(i)
    如果结束
    下一个
    切片=返回
    其他的
    切片=空
    如果结束
    端函数
    
    这避免了前面答案中的一些问题:

  • 不考虑数组中的对象
  • 允许负的开始值和结束值;他们从最后开始倒数
  • 如果开始高于结束,则给出反向数组子集
  • 由于阵列为空,因此不需要(昂贵的)redim保留
  • 如果输入不是数组,则返回定义的结果(
    Null
  • 使用内置函数
    IsArray
    ,而不是对输入进行字符串操作/比较

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

    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
    
    函数片(aInput、Byval aStart、Byval aEnd)
    如果是IsArray(aInput),那么
    昏暗的我
    暗步
    暗棱返回
    如果aStart<0,则
    aStart=aStart+Ubound(aInput)+1
    如果结束
    如果aEnd<0,则
    aEnd=aEnd+Ubound(输入)+1
    如果结束
    Redim arrReturn(Abs(aStart-aEnd))
    如果aStart>aEnd,则
    intStep=-1
    其他的
    intStep=1
    如果结束
    对于i=从开始到结束步骤intStep
    如果是Isobject(aInput(i)),则
    设置arrrurn(Abs(i-aStart))=aInput(i)
    其他的
    arrrurn(Abs(i-aStart))=aInput(i)
    如果结束
    下一个
    切片=返回
    其他的
    切片=空
    如果结束
    端函数
    
    这避免了前面答案中的一些问题:

  • 不考虑数组中的对象
  • 允许负的开始值和结束值;他们从最后开始倒数
  • 如果开始高于结束,则给出反向数组子集
  • 由于阵列为空,因此不需要(昂贵的)redim保留
  • 如果输入不是数组,则返回定义的结果(
    Null
  • 使用内置函数
    IsArray
    ,而不是对输入进行字符串操作/比较

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

    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
    
    函数片(aInput、Byval aStart、Byval aEnd)
    如果是IsArray(aInput),那么
    昏暗的我
    暗步
    暗棱返回
    如果aStart<0,则
    aStart=aStart+Ubound(aInput)+1
    如果结束
    如果aEnd<0,则
    aEnd=aEnd+Ubound(输入)+1
    如果结束
    Redim arrReturn(Abs(aStart-aEnd))
    如果aStart>aEnd,则
    intStep=-1
    其他的
    intStep=1
    如果结束
    对于i=从开始到结束步骤intStep
    如果是Isobject(aInput(i)),则
    设置arrrurn(Abs(i-aStart))=aInput(i)
    其他的
    arrrurn(Abs(i-aStart))=aInput(i)
    如果结束
    下一个
    切片=返回
    其他的
    切片=空
    如果结束
    端函数
    
    这避免了前面答案中的一些问题:

  • 不考虑数组中的对象
  • 允许负的开始值和结束值;他们从最后开始倒数
  • 如果开始高于结束,则给出反向数组子集
  • 由于阵列为空,因此不需要(昂贵的)redim保留
  • 返回定义的结果(
    N