首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >等价于VBS redim的Javascript保存

等价于VBS redim的Javascript保存
EN

Stack Overflow用户
提问于 2015-11-08 04:58:08
回答 1查看 2.1K关注 0票数 0

我正在尝试将一些旧的VBScript重写为ASP.NET应用程序的Javascript,有一行我不知道如何翻译,而且我甚至不完全肯定它在做什么。

该应用程序基本上允许用户输入一个新的员工号,以便将其添加到数据库中,然后为其分配用户权限。不要问我为什么代码这么乱,我不是最初写的,我只是想让它在Chrome中工作

下面是我到目前为止翻译的相关代码:

代码语言:javascript
代码运行次数:0
运行
复制
if(form1.txtEmpno.value != ""){
var oOption;
oOption = document.createElement("OPTION");
oOption.text=form1.txtEmpno.value;
oOption.value=form1.txtEmpno.value;
form1.lstActive.add (oOption);
oOption = document.createElement("OPTION");
oOption.text="";
oOption.value="";
form1.lstPerms.add (oOption);
redim preserve arrUsers(1,ubound(arrUsers,2)+1);
arrUsers(0,ubound(arrUsers,2)) = form1.txtEmpno.value;
arrUsers(1,ubound(arrUsers,2)) = "";
form1.txtEmpno.value = "";
oOption = null;
}

下面是有争议的台词:

代码语言:javascript
代码运行次数:0
运行
复制
redim preserve arrUsers(1,ubound(arrUsers,2)+1);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-08 05:32:45

MSDN将ReDim [Preserve] varname(subscripts)定义为:

ReDim语句用于调整动态数组的大小或大小,该动态数组已经使用带有空括号的PrivatePublicDim语句正式声明(没有维度下标)。可以重复使用ReDim语句来更改数组中的元素和维度数。 如果使用Preserve关键字,则只能调整最后一个数组维度的大小,而且根本不能更改维度数。例如,如果数组只有一个维度,则可以调整该维度的大小,因为它是最后一个也是唯一的维度。但是,如果数组有两个或多个维度,则可以只更改最后一个维度的大小,并且仍然保留数组的内容。

JavaScript中的数组与VBScript的数组有不同的语义,特别是它们实际上更接近vector而不是真正的数组,而且JavaScript不提供真正的N维数组:相反,您使用交错数组(数组内部数组)。这意味着您的VBScript不能从语法上转换为JavaScript。

以下是VBScript中的相关代码:

代码语言:javascript
代码运行次数:0
运行
复制
ReDim Preserve arrUsers(1,ubound(arrUsers,2)+1)
arrUsers(0,ubound(arrUsers,2)) = form1.txtEmpno.value
arrUsers(1,ubound(arrUsers,2)) = ""

我们看到arrUsers是一个二维数组.这将需要转换为交错数组,但是您还没有发布定义和初始化arrUsers的代码,也没有在以后如何使用它,所以我只能根据假设进行工作。

它看起来是在最后一个维度中添加一个元素,但是代码似乎只使用了[1]下标中的额外空间(也就是说,它只需要为第0维的某些值而不是所有值提供额外的维度空间),这使得这更简单,因为您不需要遍历每一个0维下标。

JavaScript数组有许多我们将使用的函数属性,特别是push:它将一个元素追加到数组的末尾(必要时在内部扩展缓冲区),pop从数组中删除最后一个(最高索引的)元素(如果数组为空,则为NOOP):

代码语言:javascript
代码运行次数:0
运行
复制
var arrUsers = [ [], [] ]; // empty, staggered 2-dimensional array
...
arrUsers[0].push( form1.txtEmpno.value );
arrUsers[1].pop();

简单多了。

但是,如果这个数组只是存储和表示数据的内部模型的一部分,那么您应该利用JavaScript对象原型,而不是使用数组索引,因为这使得代码可以自我描述,例如:

代码语言:javascript
代码运行次数:0
运行
复制
var User = function(empNo, name) {
    this.employeeNumber = empNo;
    this.name = name;
};

var users = [];
users.push( new User(1, "user 1") );
users.push( new User(23, "user 23") );

...

for(var i = 0; i < users.length; i++ ) {
    alert( users[i].name );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33590897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档