TypeError: Cannot set property '0' of undefined

222
04 мая 2017, 15:05

Хочу создать многомерный массив, заполненный значения двух атрибутов, чтобы вышло что-то вроде:

"marks": [
    [2,1],
    [1,2]
]

Но выпадает ошибка

TypeError: Cannot set property '0' of undefined

Код следующий, ошибка в данном случае в районе marks[i] =:

var marks;
var cols2 = document.querySelectorAll('.speech_gap');
    cols2.forEach(function (speech, i) {
        marks[i] = [speech.getAttribute("emotion"), speech.getAttribute("who")];
});

Что не так?

Answer 1

В данном случае не инициализирована переменная marks. Ее значение по умолчанию - undefined.

Поэтому при вызове marks[i] происходит ошибка. Для решения, достаточно инициализировать данную переменную массивом

var marks = [];

Кроме того, раз уж на основе одной коллекции нужно составить другую, лучше использовать метод map, который специально для этого предназначен

var cols2 = document.querySelectorAll('.speech_gap');
var marks = Array.from(cols2).map(function (speech, i) {
        return [speech.getAttribute("emotion"), speech.getAttribute("who")];
});

Array.from используется для того, чтобы получить из коллекции col2 массив, у которого есть метод map.

READ ALSO
Не рисуется canvas на неактивной вкладке

Не рисуется canvas на неактивной вкладке

ЗдравствуйтеПроблема состоит в том, что когда я запускаю рисование на одной вкладке, перехожу на вторую, а через 5 (без разницы сколько) секунд...

221
Carousel (Angular 2)

Carousel (Angular 2)

Я пытаюсь написать свою собственную карусель на Angular2, но не знаю как это сделать правильно ( тк

277
GETTEXT перевод для отдельных JS скриптов

GETTEXT перевод для отдельных JS скриптов

Как сделать перевод, для скриптов, которые выводят текст в тэги если они такие:

353
Как обновить offset в vk api?

Как обновить offset в vk api?

Есть функция loadPhoto которая принимает id пользователя, id альбома и offsetЕсли offset не передан то по дефолту он равен 0

346