1. ホーム
  2. Web プログラミング
  3. ジャバスクリプト

[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない

2021-12-28 13:49:11

質問

配列の内容を別の配列にプッシュしたいのですが、以下のようなコードです。

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]); }
}

2番目のifでエラーが発生します。

"Uncaught TypeError: Cannot read property 'push' of undefined" error in this snippet.

解決方法は?

エラーが発生した理由 order[1]undefined .

このエラーメッセージは、コードのどこかで、ある名前(ここでは "push" )を持つプロパティにアクセスしようとしているが、オブジェクトではなく、参照のベースが実際にあることを意味しています。 undefined . したがって、問題を見つけるには、そのプロパティ名("push")を参照しているコードを探し、その左側にあるものを確認することになるのです。この場合、そのコードは

if(parseInt(a[i].daysleft) > 0){ order[1].push(a[i]); }

ということは、このコードが期待するのは order[1] は配列である。しかし、それは ではない 配列です。 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]; }
}