[英]How do i access the objects inside the array returned by a javascript function
[英]How do I access data in an array that was returned by a function?
我有一個函數,它返回一個包含數組的值,並且在數組內部,它們是對象數據 ,我想訪問其值。
現在,我正在做的是
let budgets = await this.getReferenced(wipDocStore, facebookAdData, 'budget')
budgets = budgets[0].data
但是,我不確定這是否是一種巧妙的方法,或者人們通常會做什么。
作為JavaScript的新手,我認為類似這樣的代碼
let budgets = await this.getReference(DocStore, AdData, 'budget')[0].data
但事實並非如此(為什么?)。 我可以做的另一件事是直接在getReference
函數中返回相關數據,但是由於這是可重用函數,因此我不會總是希望數據位於數組的第0位。
通常,有經驗的程序員也會把上面的代碼分為兩部分
let budgets = await this.getReference(DocStore, AdData, 'budget')
budgets = budgets[0].data
如果他們不能更改this.getReference
函數? 另外,為什么這不起作用?
let budgets = await this.getReference(DocStore, AdData, 'budget')[0].data
忘記您想學習的“絕妙技巧”的內容。
考慮到這一點,請考慮以下幾點:
const reference = await this.getReference(DocStore, AdData, 'budget')
const budgets = reference[0].data
這沒有歧義,並且清楚地一步一步傳達了正在做的事情。 您await
引用,然后從引用數組的第一個條目中獲取數據。 另外,具有const
聲明是很好的,因為您可以立即得出結論,在閱讀代碼時永遠不會重新分配值。
這對於優化也有好處,因為使用常量引用可以減少在底層引擎中取消對其值進行拆箱的調用次數,因為在其生命周期內它將保持相同的類型和相同的引用。
想想模棱兩可。 您正在await
this.getReferenced(...)
還是this....data
? 要直接取消引用結果,您需要使用括號將其清除:
let budgets = (await this.getReference(DocStore, AdData, 'budget'))[0].data;
是否真的比將其分為兩行更具可讀性,您自己決定。
const budgets = await this.getReferenced(wipDocStore, facebookAdData, 'budget').then(results => results[0].data)
你可以做
let budgets = (await this.getReference(DocStore, AdData, 'budget'))[0].data;
但是,如果只需要屬性data
那么這是另一種選擇:
let {data} = (await this.getReference(DocStore, AdData, 'budget'))[0]
將data
包裝在括號中意味着您只想獲取名為data
的屬性。
但是,以我個人的觀點使其更具可讀性,這將是最佳選擇:
let budgets = await this.getReference(DocStore, AdData, 'budget');
let {data} = budgets[0];
如果您看一下:
您將看到await關鍵字將等待完全履行或拒絕的承諾。 或者,如果您未通過承諾,則立即返回該值。
因此,您有兩個選擇:將apromise或value作為表達式,因為await期望一個表達式。
在這里:
let budgets = await this.getReference(DocStore, AdData, 'budget')[0].data
由於它需要一個表達式,因此將首先對該表達式求值,因此返回值是不確定的,因為您正在訪問索引為0的函數。
根據規則的規定,如果您將值傳遞給await關鍵字,它將立即返回該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.