Javascript数组到VBScript

Javascript数组到VBScript,javascript,arrays,vbscript,asp-classic,jscript,Javascript,Arrays,Vbscript,Asp Classic,Jscript,我有一个使用Javascript构建的对象数组,我需要使用VBScript读取它(如下例所示)。在VbScript代码中,我找不到作为myArray对象在数组中循环的方法 这个例子简化了我的问题。我无法更改页面的默认语言。myArray对象必须使用javascript构建。必须使用内嵌vbscript输出数组 <%@ Language="VBScript" %> <script language="javascript" runat="server"> var

我有一个使用Javascript构建的对象数组,我需要使用VBScript读取它(如下例所示)。在VbScript代码中,我找不到作为
myArray
对象在数组中循环的方法

这个例子简化了我的问题。我无法更改页面的默认语言。
myArray
对象必须使用javascript构建。必须使用内嵌vbscript输出数组

<%@ Language="VBScript" %>

<script language="javascript" runat="server">

    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];

</script>

<%
    Response.Write(myArray) ' [object Object],[object Object],[object Object]
    'Response.Write(myArray(0)) ' ERROR
    'Response.Write(myArray[0]) ' ERROR
    Response.Write(myArray.[0]) ' [object Object]
    Response.Write(myArray.[0].name) ' object 1
    Response.Write(VarType(myArray)) ' 8
    Response.Write(myArray.length) ' 3
    Response.Write(VarType(myArray.[0])) ' 8
    Response.Write(VarType(myArray.[0].name)) ' 8
    Response.Write(TypeName(myArray)) ' JScriptTypeInfo
    Response.Write(TypeName(myArray.[0])) ' JScriptTypeInfo

    ' ERROR
    ' Type mismatch: 'UBound'
    'Response.Write(UBound(myArray))

    ' ERROR
    ' Object doesn't support this property or method: 'myArray.i'
    'Dim i
    'For i = 0 To myArray.length - 1
    '    Response.Write(myArray.[i])
    'Next
%>

var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];

不要使用数组。使用字典对象,如下所示

<%@ Language="VBScript" %>

<script language="javascript" runat="server">

    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];

    var myDictionary = Server.CreateObject("Scripting.Dictionary");

    for (var myArrayIndex = 0; myArrayIndex < myArray.length; myArrayIndex++) {
        myDictionary.Add(myArrayIndex, myArray[myArrayIndex]);
    }

</script>

<%
    Dim i
    For i = 0 To UBound(myDictionary.Keys)
        Response.Write(myDictionary.Item(i).name)
    Next
%>

var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
var myDictionary=Server.CreateObject(“Scripting.Dictionary”);
对于(var myArrayIndex=0;myArrayIndex
似乎JScript数组方法仍然可以通过VBScript使用:

<script language="javascript" runat="server">
    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];
</script>

<%
    Do While myArray.length > 0
        response.write myArray.shift().name
        response.write "<br>"
    Loop
%>

var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
0
response.write myArray.shift().name
response.write“
” 环 %>
您可以将打印委托给JScript函数:

<%@ Language="VBScript" %>
<script language="javascript" runat="server">
    var myArray = [
        {
            name: "object 1"
        },
        {
            name: "object 2"
        },
        {
            name: "object 3"
        }
    ];
</script>

<%
    '// vbscript
    Response.Write(TypeName(myArray)) ' JScriptTypeInfo

    Response.Write printArr(myArray)

    '// more vbscript
%>

<script language="javascript" runat="server">
    function printArr(arr) 
    {
        for (var i = 0; i < myArray.length; i++)
        {
            Response.Write("<br />index " + i + " = " + myArray[i].name);
        }
    }
</script>

var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];

虽然有点晚了,但您可以向标准javascript数组添加一个自定义方法。该方法也将在VBscript中可用。 因此,请将以下代码添加到脚本中:

// add an Item() method to the standard array object so we can iterate arrays in VBscript.
Array.prototype.Item = function(idx) {
    return this[idx];
};
您可以使用:

myArray.Item(0)
在VBscript中获取数组中的一个项


HTH

我无法更改页面的默认语言-因此只需更改输出部分的语言即可?@AlexK。据我所知,如果页面的默认语言是vbscript,我就无法编写内联javascript。您当前的javascript不是通过runat=server来编写的吗?@AlexK。
似乎比一切都重要。如果我用
响应将其放在页面底部。Write()
生成的文本将显示在页面顶部。添加了一个我所说的
脚本的示例。Dictionary
对象是一个不必要的大开销,我不推荐这种方法。@Lankymart我曾考虑删除这篇文章,但这是实现预期结果的另一种方法。Stephen的解决方案要好得多。公平地说,没有必要删除它。在我最初的问题中,我应该解释一下,我的vbscript代码不仅仅是打印出objects name属性。数组是具有许多属性的搜索结果对象的集合,并且有多个内嵌vbscript块与html混合以构建搜索结果列表。使用
Response.Write
构建html很麻烦,并且会导致代码很难维护。解决方案“必须”允许内联vbscript在javascript内置的数组中迭代。这是一个很好的解决方案。