Javascript 数组到 VBScript

问题描述 投票:0回答:5

我有一个使用 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
%>
javascript arrays vbscript asp-classic jscript
5个回答
8
投票

虽然有点晚了,但您可以向标准 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


5
投票

看来 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
%>

0
投票

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

<%@ 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
%>

0
投票

您可以将打印委托给 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>

0
投票

对于在当今这个时代面临同样问题的人(距离提出问题已经 9 年了),JScript 有一个内置的

Array.prototype.at()
可以满足这个确切的目的,所以,从 OP 的代码来看:

For i = 0 To myArray.length - 1
    Response.Write(myArray.at(i))
Next

无需任何额外的操作。我认为当问题被提出时这应该会起作用,因为我相信从那时起实施并没有改变 ECMA 版本。

对于 Microsoft 声称的内容,JScript 是 ECMAScript3web archive)的实现,因此希望 MDN 中声称与 ECMAScript3 兼容的任何内容都应该在 JScript 中工作,即使现在 MDN 也是一个很棒的(并且是最新的) !) JScript 语法参考。

也许可以在 https://tc39.es/ecma262/

找到 ECMAScript 第 3 版或 ECMA-262 的最好的、维护的和特定的文档。
© www.soinside.com 2019 - 2024. All rights reserved.