В JS массивы начинаются с индекса 0
, и последний элемент будет на .length - 1
. Таким образом, вы должны изменить свой цикл, чтобы начать в 0
и использовать <
, а не <=
:
for (i=0;i<selectionContainer.length;i++){
Ошибка вы получили, Uncaught TypeError: Cannot read property 'column' of undefined'
, потому что когда ваш счетчик встал на selectionContainer.length
вы пытались прочитать элемент просто мимо конец массива, который сам по себе не дает ошибки, он просто возвращает undefined
, но затем undefined.column
дает ошибку.
Но также - хотя это немного сложно сказать, потому что я не уверен в коде, который вы не показываете - в коде вы do показать, что похоже, что вы заполняете свой массив несколькими ссылками на тот же объект, потому что в вашей функции change
вы обновляете свойства существующего объекта selection
, а затем помещаете ссылку на этот объект в массив. Я считаю, что вам нужно создать новый объект в этой точке:
change: function(oEvent){
selection = new Object();
selection.column = "someText";
selection.term = "someOtherText";
selectionContainer[nrOfEntries] = selection;
}
... но проще всего просто использовать литерал объекта:
change: function(oEvent){
selectionContainer[nrOfEntries] = { column : "someText", term : "someText" };
}
Вы не говорите, что nrOfEntries
является , но вам не нужна отдельная переменная, чтобы отслеживать количество элементов в массиве, когда JS предоставляет вам свойство .length
.В любом случае, если вы просто пытаетесь добавить в конец массива вы можете сделать это:
selectionContainer.push({ column : "someText", term : "someText" });
В целом считается хорошей практикой использовать литералы массивов и объектов литералов для создания пустых массивов и объектов, поэтому начало вашего кода может быть:
var selection = {};
...
var selectionContainer = [];
Прежде всего - зачем вы заканчиваете цикл с индексом i <= selectionContainer.length. Разве это не правильно, если вы закончите с последним элементом + 1; – moritzpflaum
Правильно. Я пропустил удаление = – Krasimir