Javascript 如何从数组中的单个对象获取密钥?

Javascript 如何从数组中的单个对象获取密钥?,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,我有一个FirebaseListObservable,它被循环通过,列表中的一个对象被通过,我如何获得通过的对象的键值 选中时,对象的单个实例将传递给函数,我需要获取键,但如果使用value.key或value.uid,则未定义 这是通过firebase阵列执行的循环 <sebm-google-map-marker *ngFor="let m of markers | async" (markerClick)="test(m)" [latitude]="m.lat" [longitude]

我有一个FirebaseListObservable,它被循环通过,列表中的一个对象被通过,我如何获得通过的对象的键值

选中时,对象的单个实例将传递给函数,我需要获取键,但如果使用value.key或value.uid,则未定义

这是通过firebase阵列执行的循环

<sebm-google-map-marker
*ngFor="let m of markers | async"
(markerClick)="test(m)"
[latitude]="m.lat"
[longitude]="m.lng"
我想获取正在传递的项目的密钥


您需要获取密钥,然后使用密钥在集合中循环:

首先创建一个密钥数组(可能在subscribe块中执行此操作,因为它看起来像代码中的可观察项):

然后使用键循环:

<sebm-google-map-marker
  *ngFor="let mKey of markerKeys"
  (markerClick)="test(markers[mKey])"
  [latitude]="markers[mKey].lat"
  [longitude]="markers[mKey].lng"

我相信Eeks33是正确的,但由于标记不是集合,而是集合的可观察对象,所以不能将其视为集合

试一试

然后,您应该能够在模板中迭代
markersWithKeys
,其中每个项现在都有一个key属性

<sebm-google-map-marker
*ngFor="let m of markersWithKeys | async"
(markerClick)="test(m)"
[latitude]="m.lat"
[longitude]="m.lng"

请与其他人分享一些代码示例understand@abeyaz好了,谢谢你告诉我你能显示填充组件
标记的代码吗?我认为一种解决方案是,当您从Firebase后端加载marker对象时,将其存储在marker对象中的项的键保存下来。
<sebm-google-map-marker
  *ngFor="let mKey of markerKeys"
  (markerClick)="test(markers[mKey])"
  [latitude]="markers[mKey].lat"
  [longitude]="markers[mKey].lng"
const addKeys = (collection => Object.keys(collection)
                                     .map(key => collection[key] = key));
const markersWithKeys = markers.map(addKeys);
<sebm-google-map-marker
*ngFor="let m of markersWithKeys | async"
(markerClick)="test(m)"
[latitude]="m.lat"
[longitude]="m.lng"
test(m) {
    console.log(m.key);
}