Невозможно заполнить массив в массиве - Javascript - PullRequest
0 голосов
/ 20 апреля 2011

Итак, у меня есть массив внутри массива. Это называется r0w. Вот как это выглядит:

r0w[0] = [1,38,0,63,20,39,1,36,36,36,34,35,35,36,36,37,1]
r0w[1] = [1,38,63,124,20,101,1,36,36,36,34,35,35,36,36,37,1]
r0w[2] = [1,38,124,185,20,162,1,36,36,36,34,35,35,36,36,37,1]
r0w[3] = [1,48,185,248,25,224,1,44,37,103,35,92,1]

Теперь я хочу выполнить некоторые вычисления для этих массивов внутри массивов и вывести их в другой массив в массиве с именем absw1dth. Вот мой код.

var absw1dth = [[]];

for (e=0 ; e < r0w.length ; e++ ) {
    absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
    for (f=8 ; f < r0w[e].length ; f++ ) {
        absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
        };
    };

В этой строке сохраняется ошибка

absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );

и говорит, что undefined не является объектом.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Проблема с инициализацией вашего abswidth.Вы сделали это

var absw1dth = [[]];

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

Если данные являются статическимикак вы показали (в массиве r0w всегда будет только четыре строки), вы можете решить это с помощью инициализации:

var absw1dth = [ [], [], [], [] ];

Теперь abswidth - это массив из четырех элементов, где каждыйЭлемент - это пустой массив.

Но если данные более динамичны, я бы, вероятно, инициализировал на лету:

var absw1dth = []; // Just an empty array

for (e=0 ; e < r0w.length ; e++ ) {
    abswidth[e] = []; // Create this element
    absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
    for (f=8 ; f < r0w[e].length ; f++ ) {
        absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
        };
    };
    // ...
}

Если возможно, что код, который вы не показываетевозможно, уже создали элементы массива в abwidth, но также могут и не иметь, вы можете сначала протестировать:

var absw1dth = []; // Just an empty array

for (e=0 ; e < r0w.length ; e++ ) {
    if (!abswidth[e]) {
        abswidth[e] = []; // Create this element
    }
    absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
    for (f=8 ; f < r0w[e].length ; f++ ) {
        absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
        };
    };
    // ...
}

или перейти ко всему «функциональному программированию» и использовать странно-мощный * JavaScript* оператор :

var absw1dth = []; // Just an empty array

for (e=0 ; e < r0w.length ; e++ ) {
    abswidth[e] = abswidth[e] || []; // Create this element if needed
    absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
    for (f=8 ; f < r0w[e].length ; f++ ) {
        absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
        };
    };
    // ...
}
1 голос
/ 20 апреля 2011

absw1dth[e][0] не является объектом, поскольку absw1dth[e] еще не является объектом.

Попробуйте absw1dth[e] = []; absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );

1 голос
/ 20 апреля 2011

Попробуйте:

var absw1dth = [];

for (e=0 ; e < r0w.length ; e++ ) {
    absw1dth[e] = [];
    absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
    //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...