Arrays ASP-classic中的数组合并

Arrays ASP-classic中的数组合并,arrays,function,asp-classic,merge,Arrays,Function,Asp Classic,Merge,我正在为ASP classic开发一个数组合并函数。在一个(或两个)参数为空或不是数组之前,我所做的似乎都在工作。以下是我目前掌握的情况: 函数数组\u合并(左、右) 总尺寸 昏暗的我 模糊合并 '将“left”转换为数组 如果不是isArray(左),则 左=数组(左) 如果结束 '将“right”转换为数组 如果不是isArray(对),那么 右=数组(右) 如果结束 '以“left”开头并添加“right”元素 右_size=ubound(右) 总尺寸=U(左)+右尺寸+1 合并=左 重播

我正在为ASP classic开发一个数组合并函数。在一个(或两个)参数为空或不是数组之前,我所做的似乎都在工作。以下是我目前掌握的情况:

函数数组\u合并(左、右)
总尺寸
昏暗的我
模糊合并
'将“left”转换为数组
如果不是isArray(左),则
左=数组(左)
如果结束
'将“right”转换为数组
如果不是isArray(对),那么
右=数组(右)
如果结束
'以“left”开头并添加“right”元素
右_size=ubound(右)
总尺寸=U(左)+右尺寸+1
合并=左
重播保留合并(总大小)
对于i=0到ubound(右)
合并(右_大小+i+1)=右(i)
下一个
'返回值
数组\合并=合并
端函数
我得到一个错误:

Error Type: Microsoft VBScript runtime (0x800A01B6) Object doesn't support this property or method: 'merged' /_inc/nav/left-nav.inc, line 21 错误类型: Microsoft VBScript运行时(0x800A01B6) 对象不支持此属性或方法:“合并” /_inc/nav/left-nav.inc,第21行
从行
merged(right_size+i+1)=right(i)
。关于我哪里出了问题,你有什么看法吗?

LittleBobbyTables是对的,你应该更改参数

我认为,根据您的输入,对对象进行额外检查可以解决您的问题

function array_merge(left, right)
  dim right_size
  dim total_size
  dim i
  dim merged
  ''// Convert "left" to an array
  if not isArray(left) then
    left = Array(left)
  end if
  ''// Convert "right" to an array
  if not isArray(right) then
    right = Array(right)
  end if
  ''// Start with "left" and add the elements of "right"

  right_size = ubound(right)
  total_size = ubound(left) + right_size + 1

  merged = array()
  redim merged(total_size)
  dim counter : counter = 0

  for i = lbound(left) to ubound(left)
    if isobject(left(i))then
        set merged(counter) = left(i)
    else
        merged(counter) = left(i)
    end if
    counter=counter+1
  next

  for i = lbound(right) to ubound(right)
    if isobject(right(i))then
        set merged(counter) = right(i)
    else
        merged(counter) = right(i)
     end if
  next


  ''// Return value
  array_merge = merged
end function
一些测试代码:

dim a: a=100
dim b: b=200

dim c: set c=nothing
dim d: set d=nothing

dim e: set e=server.createobject("scripting.filesystemobject")
dim f: set f=server.createobject("scripting.filesystemobject")


dim x,y,z,zz

x = array_merge(a,b)
y = array_merge(c,d)
z = array_merge(e,f)
zz = array_merge(a,e)

response.write x(0)
response.write x(1)

''// Accessing Nothing Values throw Error
''//response.write y(0)
''//response.write y(1)

response.write z(0).GetExtensionName("test.doc")
response.write z(1).GetExtensionName("test.doc")

response.write zz(0)
response.write zz(1).GetExtensionName("test.doc")

我知道这个问题有点老了,但是您需要解决一些问题,以便从两个数组中获取所有值

你需要升级第二个的计数器,就像第一个一样。 否则,将不会分配第二个数组中的一个值

以该代码为例:

''//Build the Arrays

 Dim a,b,c
 a=array("a1","a2") : b=array("b1","b2") : c=array_merge(a,b)

''//Run the code

 For Each i In c 
    Response.Write i &"<br />"
    Next

''//The main function

 Function array_merge(arr1, arr2)
    ''//Declare all function variables
     dim arr1_size,arr2_size,total_size,i,merged,counter

    ''//Fix empty or none arrays
     if not isArray(arr1) then arr1 = Array(arr1) end if
     if not isArray(arr2) then arr2 = Array(arr2) end if

    ''// Get and set the Arrays Size
    arr1_size = ubound(arr1) : arr2_size = ubound(arr2)
    total_size = arr1_size + arr2_size    + 1

    ''//Create a temporary array and assign it a size
    merged = array()
    redim merged(total_size)
    counter = 0

    ''//Create one single Array with the two others by looping them
    For i = lbound(arr1) to ubound(arr1)
      IF isobject(arr1(i)) then
        set merged(counter) = arr1(i)
        Else
        merged(counter) = arr1(i)
        End if
      counter=counter+1
      Next
    For i = lbound(arr2) to ubound(arr2)
     If isobject(arr2(i))then
       set merged(counter) = arr2(i)
       Else
       merged(counter) = arr2(i)
       End if
       counter=counter+1
       Next

    ''// Return the value
    array_merge = merged
    End Function
“”//构建阵列
尺寸a、b、c
a=数组(“a1”、“a2”):b=数组(“b1”、“b2”):c=数组合并(a、b)
''//运行代码
对于c中的每个i
响应。写入i&“
” 下一个 “”//主要功能 函数数组_merge(arr1、arr2) ''//声明所有函数变量 dim arr1\U大小、arr2\U大小、总大小、i、合并、计数器 ''//修复空数组或无数组 如果不是isArray(arr1),则arr1=数组(arr1)结束如果 如果不是isArray(arr2),则arr2=数组(arr2)结束如果 ''//获取并设置数组大小 arr1\u size=ubound(arr1):arr2\u size=ubound(arr2) 总尺寸=arr1尺寸+arr2尺寸+1 “”//创建一个临时数组并为其指定大小 合并=数组() 合并的重播(总大小) 计数器=0 ''//通过循环其他两个数组来创建一个数组 对于i=lbound(arr1)到ubound(arr1) 如果isobject(arr1(i))那么 集合合并(计数器)=arr1(i) 其他的 合并(计数器)=arr1(i) 如果结束 计数器=计数器+1 下一个 对于i=lbound(arr2)到ubound(arr2) 如果isobject(arr2(i))那么 集合合并(计数器)=arr2(i) 其他的 合并(计数器)=arr2(i) 如果结束 计数器=计数器+1 下一个 ''//返回值 数组\合并=合并 端函数
保罗·Pta的回答带来了微小的效率提升。不需要遍历arr1;只要“重播”就行了


几年后,也许有人可以用它

function array_merge(arr, arr2)
    for each elm in arr2
        redim preserve arr(UBound(arr) + 1)
        arr(UBound(arr)) = elm
    next

    array_merge = arr
end function

当你得到那个错误时输入的是什么?只是把它扔出去--
LEFT
RIGHT
是VBScript中的函数。是否有可能代码实际上是在
右侧(i)
上呕吐?您可能需要更改函数的参数名称。我很困惑这是一个问题还是一个答案?这不是一个明确的建议,以取代OP的代码,从而解决问题吗?它声明了一个名为array_merge的函数,答案是“你需要做这样那样的事情来实现这样那样的事情”。我还没有详细检查代码,但我不清楚为什么它会被标记?如果我们将“我们”替换为“你”,那么这是一个更清晰的答案?@GreenAsJade感谢您注意到这是一个答案,并对其进行编辑以使其更清晰。很抱歉,在查看标记的帖子时出现了错误。@GreenAsJade堆栈代码段的相关性如何?我们讨论的是“服务器端”脚本语言。我也对代码片段感到好奇——但我现在才意识到海报认为他们需要将代码放入代码片段中进行格式化——一堆ASP代码只是包装在代码片段标记中,而不是{}代码。与其遍历左,为什么不
redim preserve left(总大小)
然后向其中添加right的值?
function array_merge(arr, arr2)
    for each elm in arr2
        redim preserve arr(UBound(arr) + 1)
        arr(UBound(arr)) = elm
    next

    array_merge = arr
end function