Firebaseを使用してAngular2プロジェクトに取り組んでいます。
すべてのクエリ結果をthis.guestPush
の同じキーの下にプッシュする必要があります。
異なるユーザーレベルを含む複数の選択要素があります。 4、6、9。
1つのレベルが選択されると、結果のオブジェクトはguestPush
配列に保存されますが、別のレベルが選択されると、次のエラーが発生します。
私はこのエラーを受け取ります:
エラーTypeError:this.guestPush [( "filter" + i)]。Pushは関数ではありません
これが私のコードです:
guestPush: any[] = new Array;
level.forEach((lvl, index) => {
this.db.object(`levelsUsers/${lvl}/users`)
.subscribe(users => {
if (this.guestPush['filter_' + i]) {
this.guestPush['filter_' + i].Push(users);
} else {
this.guestPush['filter_' + i] = users;
}
}, err => console.log(err));
});
編集***
フィルターに一致するユーザーを含むユーザーオブジェクト:
Object {-KmSjAaxdCUvrPEQ8InI: Object, $key: "users", $exists: function}
-KmSjAaxdCUvrPEQ8InI: Object
admin:"false"
description:"desc"
...
...
verified:false
__proto__:Object
exists:function ()
$key:"users"
__proto__:Object
そしてthis.guestPush[i] = users;
は次のようなオブジェクトを作成します:
[Object]
0:Object
-KmSjAaxdCUvrPEQ8InI: Object
admin:"false"
description:desc"
...
...
verified:false
__proto__:Object
$exists:function ()
$key:"users"
__proto__:Object
length:1
__proto__:Array(0)
したがって、次のループでは、-KmSjAaxdCUvrPEQ8InI
キーの値として追加されている限り、0
または何かの横に新しいユーザーオブジェクトを追加します。
私は結局使用しました
this.guestPush.Push({ [i]: { [key]: obj } });
配列応答を取得していて、それをオブジェクトに割り当てているようです:
this.guestPush['filter_' + i] = users;
そう this.guestPush['filter_'+ i]
は配列型になりました。別のusers
オブジェクトを追加したい場合は、基本的に別の配列を既存の配列に追加しています。その場合、concat
を使用すべきではありませんか?
if (this.guestPush['filter_' + i]) {
this.guestPush['filter_' + i].concat(users);
} else {
this.guestPush['filter_' + i] = users;
}
users
が配列でない場合は、
if (this.guestPush['filter_' + i]) {
this.guestPush['filter_' + i].Push(users);
} else {
this.guestPush['filter_' + i] = [users];
}
@Ciprian:あなたの答えに従って。
使用するには、コードを少し変更する必要があります。以下のコードで十分です。
let key ='filter_';
this.guestPush.Push({ key + i : users });
ここにあなたの問題があります、
guestPush: any[] = new Array;
'filter_' + i // this will yield a string.
this.guestPush['filter_' + i])
オブジェクトを定義できます:
let name = {};
name['x'] = 'blah';
or name.x = 'blahblah'; // name.x does same thing as name['x']
あなたの考えだと思いますname['x'] = 'blah';
は、オブジェクト構文の場合は配列です。
したがって、 Dictionary の実装について考える必要があります。
TypeScript配列の特定のキーにプッシュ
配列でsplice
メソッドを使用する必要があります: https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice