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);
}
'arrUsers' - это двумерный массив, JavaScript не поддерживает N-мерные массивы (только шахматные массивы), поэтому ваш код не может быть преобразован 1: 1 в JavaScript. Нам нужна дополнительная информация о цели «arrUsers», прежде чем мы сможем дать полезный ответ. – Dai
Это должно помочь: http://stackoverflow.com/questions/13725138/javascript-multi-dimensional-dynamic-array –