Невозможно прочитать свойство "push" из undefined при объединении массивов
При нажатии массива в другой массив я получаю
"Uncaught TypeError: Не удается прочитать свойство 'push' of undefined" error в этом фрагменте.
var order = new Object(), stack = [];
for(var i=0;i<a.length;i++){
if(parseInt(a[i].daysleft) == 0){ order[0].push(a[i]); }
if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }
if(parseInt(a[i].daysleft) < 0){ order[2].push(a[i]); }
}
Почему я получаю эту ошибку во втором выражении if?
Большое спасибо!
Ответы
Ответ 1
Вы получаете ошибку, потому что order[1]
- undefined
.
Это сообщение об ошибке означает, что где-то в вашем коде предпринимается попытка получить доступ к свойству с каким-то именем (здесь он "нажимает" ), но вместо объекта базой для ссылки является фактически undefined
. Таким образом, чтобы найти проблему, вы должны искать код, который ссылается на это имя свойства ( "push" ), и посмотреть, что слева от него. В этом случае код
if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }
что означает, что код ожидает, что order[1]
будет массивом. Это, однако, не массив; it undefined
, поэтому вы получите ошибку. Почему это undefined
? Ну, ваш код ничего не делает, чтобы сделать что-то еще, исходя из того, что в вашем вопросе.
Теперь, если вы просто хотите разместить a[i]
в определенном свойстве объекта, тогда нет необходимости называть .push()
вообще:
var order = [], stack = [];
for(var i=0;i<a.length;i++){
if(parseInt(a[i].daysleft) == 0){ order[0] = a[i]; }
if(parseInt(a[i].daysleft) > 0){ order[1] = a[i]; }
if(parseInt(a[i].daysleft) < 0){ order[2] = a[i]; }
}
Ответ 2
order
является Object
, а не Array()
.
push()
для массивов.
Обратитесь к этому сообщению
Попробуйте это (но ваши подобъекты должны быть Arrays()
):
var order = new Array();
// initialize order; n = index
order[n] = new Array();
// and then you can perform push()
order[n].push(some_value);
Или вы можете просто использовать порядок как массив объектов без массива:
var order = new Array();
order.push(a[n]);
Ответ 3
Ответ на ваш вопрос - простой порядок, а не объект, который делает его массивом.
var order = new Array();
order.push(/item to push/);
когда вся эта ошибка появляется, просто проверьте слева от того, какое свойство является ошибкой, в этом случае это push, который является порядком [], поэтому он undefined.
Ответ 4
order [] - undefined, поэтому
Просто определите порядок [1] ... [n] to = некоторое значение
это должно исправить его
Ответ 5
Вам не нужно указывать индекс.
Вместо order[0].push(a[i])
просто выполните order.push(a[i])
.