0

Я пытаюсь проверить, существует ли ключ в многомерном массиве. Следующий код мой пример:Actionscript, hasOwnProperty() многомерных массивов

var tiles:Array = new Array(
        new Array(4), 
        new Array(4), 
        new Array(4), 
        new Array(4) 
       ); 
if(test.hasOwnProperty(2)) { 
    trace('True'); 
} else { 
    trace('False'); 

Это возвращает Правда, как и следовало ожидать, так как ключ 2 действительно существует в массиве «тест».

Однако, если я попытаюсь это сделать на любом из массивов в моем массиве, код всегда возвращает False.

var tiles:Array = new Array(
        new Array(4), 
        new Array(4), 
        new Array(4), 
        new Array(4) 
       ); 
if(test[1].hasOwnProperty(2)) { 
    trace('True'); 
} else { 
    trace('False'); 

Я надеялся, что кто-нибудь сможет пролить свет на это, что мне не хватает? Возможно, есть еще один способ сделать эту проверку? Любая помощь очень ценится, спасибо! :)

Edit:

Изменен мой массив определение этому:

var tiles:Array = new Array(
        new Array('','','',''), 
        new Array('','','',''), 
        new Array('','','',''), 
        new Array('','','','') 
       ); 

И конечно же, проблема решена! Спасибо за помощь всем :)

+0

Вы добавили вещи во внутренние массивы? Внутренние массивы имеют размер 4, но если в них нет элементов, это вернет false – pwilmot

+0

RE: Ваше редактирование. Что вы собираетесь делать, когда ваши внутренние массивы хотят, чтобы их инициализировали 500 предметов? – Marty

ответ

1

Ваши внутренние массивы не имеют значений в позиции 2, поэтому ожидаются ваши результаты. У них четыре пустых слота.

Для массивов, которые являются последовательными данными и не предназначен в качестве ключа: значение магазинов, вы можете найти инструменты, специфичные для массивов больше смысла для того, что вы пытаетесь сделать, например:

if (test[1].length >= 2) 

Таким образом, , вы бы получили true, как вы надеетесь.

+0

Это правда, за исключением того, что 4 в этом случае является длиной вложенных массивов, а не 1-го элемента – fsbmain

+0

@fsbmain Да, вы правы. Я забыл, что конструктор массива AS3 взял начальную длину :-) – Marty

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