2015-04-17 4 views
0

У любого есть любимая реализация стандартной функции (например, jscript, javascript) array.slice (начало, конец) в vbscript?array.slice (начало, конец) в vbscript?

Кажется, что это часто пропущено (среди программистов vbscript) и совместное использование хорошей реализации. Если кто-то не появится, я, наверное, должен ответить на свой вопрос и написать что-нибудь.

ответ

1

Это один я использовал в прошлом:

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 
1

Для полноты, это может быть лучшим вариантом:

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. отрицательные s допускаются терпкие и конечные значения; они рассчитывают назад от конца
  3. если старт выше конца дает обращенным подмножество массива
  4. (дорого) ReDim Preserve не является необходимым, так как массив пуст
  5. определенный результат возвращается (Null), если вход не является массивом
  6. использует встроенную функцию IsArray вместо манипуляций со строками/сравнения на входе
Смежные вопросы