是的,这是一个漫长而令人费解的标题......对不起。
我正在VBScript中使用优质的ASP。我有一个字典对象,字典中的每个对象都包含它的Key和一个Array作为Item。
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
我还在脚本中传递了一个字符串列表(并转换为一个数组),它与各种字典条目相对应,因此只有那些条目可以显示在页面上,并按照数组的顺序显示。 / p>
Dim myText
myText = "a, b, c"
Dim myArray
myArray = Split(myText,",")
现在,我想迭代数组,并在myDictionary中显示每个相应Key的内容。
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
它在第一次迭代中完美运行,并正确打印到页面。但是在第二次迭代中,我得到一个错误。这是页面上的完整输出:
a1 a2
Microsoft VBScript运行时错误
'800a000d'类型不匹配:'项目(...)'
/Alpine/en_us/testCase.asp,第28行
任何人都知道为什么这不起作用?当然,这里显示的代码只是一个测试用例,但我在我的应用程序中遇到了完全相同的问题。
以下是完整的代码,因此您可以将其粘贴到测试环境中,如果它可以帮助您解决这个问题:
<%@LANGUAGE="VBSCRIPT"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Iterating through Dictionary objects - Test Case</title>
</head>
<body>
<%
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
Dim myText
myText = "a, b, c"
Dim myArray
myArray = Split(myText,",")
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
%>
</body>
</html>
关于这个问题的其他一些有趣的内容......
当我在迭代中对所有三个字典条目进行硬编码时,它可以正常工作:
For Each thing in myArray
Response.Write myDictionary.Item("a")(0) & " " & myDictionary.Item("a")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("b")(0) & " " & myDictionary.Item("b")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("c")(0) & " " & myDictionary.Item("c")(1) & "<br />" & vbcrlf
Next
产生这个:
a1 a2
b1 b2
c1 c2
a1 a2
b1 b2
c1 c2
a1 a2
b1 b2
c1 c2
并验证For-Each循环中的'thing'变量是否有效:
For Each thing in myArray
Response.Write thing
Next
产生这个:
a b c
我很困惑......
谢谢大家!我非常感谢您提供的任何帮助。 : - )
干杯,
Lelando
答案 0 :(得分:3)
这是因为myText
中的逗号后面有空格。 Split函数创建一个值为"a", " b", " c"
的数组。您的词典中不存在后两个值。
替换
行myText = "a, b, c"
使用
myText = "a,b,c"
或者使用", "
更改您的令牌分隔符(请注意空格)。