1. ホーム
  2. javascript

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

2022-02-20 18:28:41

質問

配列の内容を別の配列にプッシュすると、次のようになります。

"Uncaught TypeError: Cannot read property 'push' of undefined" エラーが発生しました。 をこのスニペットの中に入れてください。

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番目の もし という文があります。 ありがとうございました。

どのように解決するのですか?

エラーが発生した理由 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]; }
}