Eval() ЗЛО и не должны использоваться. Почему бы вам просто не передать массив в вопросе функции, которая получает ее в качестве аргумента. Тогда эта функция может проверять длину переданного массива через имя аргумента? Задача решена.
var a1 = [0,1,2,3,4,5];
var a2 = [0,1,2,3];
var a3 = [0,1,];
function getArrayLength(a){
return a.length;
}
getArrayLength(a1);
getArrayLength(a2);
getArrayLength(a3);
https://jsfiddle.net/h6ehu5cc/
Но, прямой ответ на вопрос о том, почему ваш код не работает, потому что вы писали: eval([arrayname]).length
, которая принимает строку и превращает его в массив символов в имя массива (["P","r","o","b","l","e","m","_","0"]
), когда вы должны были написать: eval(arrayname).length
, который будет оценивать имя строки в ссылке на объект, а затем будет возвращаться длина членов этого объекта.
Следующий код показывает, как ваша Eval версия должна работать, но опять же, я только показывая его, так что вы можете увидеть, что вы сделали, не используйте Eval в вашем решении для реальной, хотя:
var problem_0 = ["a","b","c","d"];
arrayStringName = "problem_0";
arrayObjectName = eval(arrayStringName);
arraylength = arrayObjectName.length;
for (i = 0; i < arraylength; i++) {
alert(arrayObjectName[i]);
}
https://jsfiddle.net/9n9552oe/
Поскольку 'eval' возвращает этот массив:' ["problem_0"] '. Во всяком случае, переменные не предназначены для динамической передачи. Узнайте, как использовать объект и его свойства. – Teemu
@Teemu На самом деле, динамически создаваемые переменные, разумеется, должны быть созданы. Для этого вам просто нужно использовать обозначение массива. Например, это не сработает: var x = 10; var someObject = new Object(); someObject.x + 1 = "Имя свойства 11 было просто установлено"; но это будет: var x = 10; var someObject = new Object(); someObject [x + 1] = "Имя свойства 11 только что было установлено"; https://jsfiddle.net/q86hd0o0/ –
@ScottMarcus Пожалуйста, перечитайте мой комментарий: «переменные не должны быть динамически _referred_». Вы говорите о свойствах объекта, которые полностью отличаются от переменных. – Teemu