web-dev-qa-db-ja.com

配列を結合するときに未定義のプロパティ「プッシュ」を読み取ることができません

配列のコンテンツを別の配列にプッシュすると、

このスニペットの「不明なTypeError:未定義のプロパティ「プッシュ」を読み取れません」エラー。

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ステートメントでこのエラーが発生するのはなぜですか?どうもありがとう!

48
d3nm4k

order[1]undefinedであるため、エラーが発生します。

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

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

つまり、コードはorder[1]が配列であることを期待しています。ただし、not配列です。 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]; }
}
54
Pointy

orderObjectであり、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]);
20
Kyle Emmanuel

このエラーは、配列を空白に初期化していないときにangularで発生します。
例:
userlist:any [];
this.userlist = [];
または
serlist:any = [];

12
Yogesh Aggarwal

ほとんどの場合、配列を初期化する必要がありますが、

let list: number[] = [];
2
Akitha_MJ

あなたの質問への答えは単純な順序であり、オブジェクトではなく配列です。 var order = new Array(); order.Push(/ プッシュするアイテム /);このエラーが表示されたら、エラーがどのプロパティの左にあるかを確認してください。この場合、Pushはorder []であるため未定義です。

1
Vishal Patil

インデックスを指定する必要はありません。

order[0].Push(a[i])を実行する代わりに、order.Push(a[i])を実行してください。

1
Manish

order []は未定義であるため、

Order [1] ... [n] to = some valueを定義するだけです

これで修正されるはずです

0
Jimma