Я пытаюсь зациклить массив, содержащий объекты, и все время получаю сообщение об ошибке: «Невозможно установить для свойства« цвет »значение undefined». Что я делаю неправильно?
var ObjectTest = function(something1, something2){
this.Name = something1;
this.Job = something2;
this.color = '';
this.numbers = [];
}
var first = new ObjectTest('Paul', 'teacher');
var second = new ObjectTest('Jane', 'doctor');
var third = new ObjectTest('Mike', 'student');
var someArray = [];
someArray.push(first, second, third);
console.info(someArray);
for(var i =0; i <= someArray.length; i++){
someArray[i].color = 'red';
};Должен быть i < someArray.length. Если в массиве 3 элемента, длина равна 3, а индексы - 0, 1 и 2.
Возможный дубликат Вложенный цикл for - массив undefined
Во-первых, спасибо, что разместили полезный фрагмент. Приведенные ниже ответы верны, но могу ли я предложить вам изучить инструменты отладки вашего браузера. Это позволило бы вам пройти через цикл элемент за элементом и увидеть все переменные и их значения. В свою очередь, это привело бы вас к решению.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно выполнять итерацию до тех пор, пока длина массива не будет превышена, потому что индексы основаны на нуле
for (var i = 0; i < someArray.length; i++) {
// ^
Массив возвращает undefined для несуществующего элемента. undefined не имеет свойства присвоить новое значение.
var ObjectTest = function(something1, something2) {
this.Name = something1;
this.Job = something2;
this.color = '';
this.numbers = [];
};
var first = new ObjectTest('Paul', 'teacher');
var second = new ObjectTest('Jane', 'doctor');
var third = new ObjectTest('Mike', 'student');
var someArray = [];
someArray.push(first, second, third);
for (var i = 0; i < someArray.length; i++) {
someArray[i].color = 'red';
} // no semicolon here
console.info(someArray);Замените <= на < в вашем цикле.
В массиве всего 3 элемента, что означает, что у вас есть индексы 0, 1 и 2. Цикл должен остановиться, когда он достигнет 3. Но поскольку вы использовали <=, а не <, i <= 3, когда i - это 3, это true, таким образом выполняя код. Ошибка вызвана тем, что someArray[3] не существует.
Более безопасный способ обхода массивов без работы с индексами - использовать array.forEach. Он выполняет цикл столько раз, сколько элементов в массиве.
someArray.forEach((object, index) => {
object.color = 'red'
})
<= был ронг
var ObjectTest = function(something1, something2){
this.Name = something1;
this.Job = something2;
this.color = '';
this.numbers = [];
}
var first = new ObjectTest('Paul', 'teacher');
var second = new ObjectTest('Jane', 'doctor');
var third = new ObjectTest('Mike', 'student');
var someArray = [];
someArray.push(first, second, third);
for(var i =0; i < someArray.length; i++){
someArray[i].color = 'red';
};
console.info(someArray);Более простой способ просмотреть массив - использовать метод forEach. Что-то вроде этого:
someArray.forEach(data => data.color = 'red');
Ваш
<=в петле должен быть<.