如何从阵列中的单个对象获取密钥?

时间:2017-05-24 19:50:43

标签: javascript angular firebase firebase-realtime-database

我有一个循环的FirebaseListObservable,并且列表中的单个对象通过,如何获取通过的对象的键值?

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

这是通过firebase数组执行的循环

open var Name: UILabel!
open func ynCategoryButtonClicked(_ sender: UITapGestureRecognizer) {
    guard let text = Name.text else { return }
    ynSearch.appendSearchHistories(value: text)
    self.delegate?.ynCategoryButtonClicked(text: text)
}

>

点击这是功能

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

我想通过

获取项目的密钥

this is the data being passed and want to get the key for the object

2 个答案:

答案 0 :(得分:0)

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

首先创建一个键数组(可能在订阅块中执行此操作,因为它看起来像代码中的observable):

markerKeys = Object.keys(markers);

然后使用键循环:

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

答案 1 :(得分:0)

我相信Eeks33是对的,但由于标记不是集合,而是集合的Observable,你可以将它视为集合。

const addKeys = (collection => Object.keys(collection)
                                     .map(key => collection[key] = key));
const markersWithKeys = markers.map(addKeys);

然后您应该可以在markersWithKeys上遍历模板,其中每个项目现在都有一个关键属性。

<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);
}