Подтвердить что ты не робот

Невозможно прочитать свойство "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? Большое спасибо!

4b9b3361

Ответ 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]).