我正在使用Firebase处理Angular2项目。
我需要在this.guestPush
中的相同密钥下推送所有查询结果。
我有一个包含不同用户级别的多选元素。 4,6,9。
当选择一个级别时,结果对象将保存在guestPush
数组中,但是当选择另一个级别时,会发生以下错误。
我收到此错误:
ERROR 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
键的值。
答案 0 :(得分:11)
看起来您正在获取数组响应,并且您将其分配给对象:
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];
}
答案 1 :(得分:8)
我最终使用
this.guestPush.push({ [i]: { [key]: obj } });
答案 2 :(得分:2)
@Ciprian:根据你的回答。
您需要对代码进行一些小改动才能使用。我希望下面的代码对你来说足够了。
Thread.sleep()
答案 3 :(得分:2)
这是你的问题,
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。
答案 4 :(得分:1)
Typescript推送到数组中的特定键
您需要使用数组上的splice
方法 :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice