2015-11-08 7 views
0

Я пытаюсь переписать старый VBScript как Javascript для приложения ASP.NET, и есть одна строка, я не уверен, как переводить, и я даже не совсем уверен, что это такое делает.Javascript эквивалент VBS redim preserve

Приложение, по существу, позволяет пользователю вводить новый номер сотрудника для добавления в базу данных и затем назначать ему права доступа. Не спрашивайте меня, почему код такой беспорядок, я не писал его изначально, я просто пытаюсь заставить его работать в Chrome

вот код, который мне удалось перевести до сих пор:

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; 
} 

вот линия в вопросе:

redim preserve arrUsers(1,ubound(arrUsers,2)+1); 
+0

'arrUsers' - это двумерный массив, JavaScript не поддерживает N-мерные массивы (только шахматные массивы), поэтому ваш код не может быть преобразован 1: 1 в JavaScript. Нам нужна дополнительная информация о цели «arrUsers», прежде чем мы сможем дать полезный ответ. – Dai

+0

Это должно помочь: http://stackoverflow.com/questions/13725138/javascript-multi-dimensional-dynamic-array –

ответ

1

MSDN определяет ReDim [Preserve] varname(subscripts) как:

Операториспользуется для изменения размера или изменения размера динамического массива, который уже был официально объявлен с помощью оператора Private, Public или Dim с пустыми круглыми скобками (без индексных индексов). Вы можете использовать оператор ReDim несколько раз, чтобы изменить количество элементов и размеров в массиве.

Если вы используете ключевое слово Preserve, вы можете изменить размер только последнего измерения массива, и вы не можете изменить количество измерений вообще. Например, если ваш массив имеет только одно измерение, вы можете изменить его размер, потому что это последнее и единственное измерение. Однако, если ваш массив имеет два или более измерений, вы можете изменить размер только последнего измерения и сохранить содержимое массива.

Массивы в JavaScript имеют различную семантику для массивов VBScript, особенно в том, что они на самом деле ближе к vector чем истинный массив, кроме JavaScript не обеспечивает для истинных N-мерных массивов: вместо того, чтобы использовать ступенчатые-массивы (массивы-внутри-массивы). Это означает, что ваш VBScript не может быть синтаксически преобразован в JavaScript.

Вот ваш соответствующий код в VBScript:

ReDim Preserve arrUsers(1,ubound(arrUsers,2)+1) 
arrUsers(0,ubound(arrUsers,2)) = form1.txtEmpno.value 
arrUsers(1,ubound(arrUsers,2)) = "" 

Мы видим, что arrUsers является 2-мерный массив. Это нужно преобразовать в шахматном массиве, но вы не разместили код, который определяет и инициализирует arrUsers, а также то, как он будет использоваться позже, поэтому я могу работать только с допущения.

Похоже, что добавляется 1 элемент к последнему измерению, но код, похоже, использует дополнительное пространство в индексе [1] (т. Е. Ему требуется только дополнительное пространство для определенных значений 0-го измерения вместо всех значений), что делает это проще, так как вам не нужно перебирать каждый индекс в 0-й степени.

JavaScript массивы имеют множество функций-свойства, которые мы будем использовать, в частности, push: который присоединяет элемент в конец массива (внутри растущего буфера при необходимости), и pop, который удаляет последний (самый высокий индексированных) элемент из массива (если массив пуст, это NOOP):

var arrUsers = [ [], [] ]; // empty, staggered 2-dimensional array 
... 
arrUsers[0].push(form1.txtEmpno.value); 
arrUsers[1].pop(); 

Намного проще.

Однако, если этот массив является частью некоторой внутренней модели для хранения и представления данных, тогда вы должны использовать объектные прототипы JavaScript вместо использования индексов массивов, поскольку это делает самоописывание кода, например:

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); 
} 
+0

спасибо! Очень тщательный и очищает много путаницы – dyr808

Смежные вопросы