我很難理解Object.entries()來自第三方的復雜物件的物件和方法,特別是DataDog。
我想要一個特定的指標,但我不知道如何得到它。我將其標記為“data_I_want”,值為“HERE”。
根據我對此 API 的理解,該函式回傳一個物件。結構示例如下所示:
{
"data": [
"attributes": {
"attributes": {
"view": {
"data_I_want": "HERE"
}
}
}
],
"links": {
"next": "stuff"
},
"meta": {
"page": {
"after": "stuff"
}
}
}
得到它的代碼是這樣的
RUMApiInstance
.searchRUMEvents(RUMApiParams)
.then((data: v2.RUMEventsResponse) => {
let ddDataViews = data;
// where I'm stuck/confused
Object.entries(ddDataViews).forEach(([key, value]) =>
console.log('values: ' `${key}: ${value}`)
);
})
.catch((error: any) => console.error(error));
如何訪問和處理嵌套物件、陣列或 JSON?
所以有一個很長的答案,但我嘗試的第一件事基本上是這個,來自答案:
您可以通過這種方式訪問??它
data.items[1].name或者
data["items"][1]["name"]兩種方式都是平等的。
當我在我的背景關系中嘗試這個時:
let ddDataViews = data.attributes[0].attributes.view.data_I_want;
我在打字稿中收到來自 VS Code 的錯誤:
Property 'attributes' does not exist on type 'RUMEventsResponse'.ts(2339)
為什么?
我在鏈接的答案中注意到,該物件是一個變數,而我的不是?您是否必須喜歡,將其宣告為該方法才能作業的變數?
所以我繼續嘗試使用 Object.entries() 方法
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
Object.entries() 方法回傳給定物件自己的可列舉字串鍵屬性 [key, value] 對的陣列。這與使用 for...in 回圈進行迭代相同,只是 for...in 回圈也會列舉原型鏈中的屬性。
所以這似乎是正確的方向。
所以我的邏輯如下:
- 獲取物件的條目
- 如果它的資料,則回圈該物件
- 在該物件內,回圈該物件
所以這就是我的想法:
Object.entries(ddDataViews).forEach(([key, value]) =>
if (key == data) {
console.log('values: ' `${value}`)
}
);
但是,我得到的這段代碼不起作用:
'{' 預期.ts(1005)
我對物件如何使用第三方 API 在 typescript 中作業感到非常困惑,如何從 API 中使用 typescript/Object.entries() 獲取“data_I_want”?
uj5u.com熱心網友回復:
根據上面的示例,您應該能夠使用以下方法訪問 data_I_want:
data.data[0].attributes.attributes.view.data_I_want
你在評論中提到
我去 typeof data.data 它說 object 但不是 [] 陣列的語法......?那是哪一個?像一個物件陣列?所以 JS 說它是一個物件?
它應該說物件:) 參考:https ://www.w3schools.com/js/js_typeof.asp
uj5u.com熱心網友回復:
當我無法立即弄清楚某些事情時,我有一種非常不知所措和焦慮的訣竅,所以我驚慌失措并關閉......這個董事會不能幫助我,但我離題了......我寫這篇文章是為了如果你愿意的話。
在這種情況下 - 當我這樣做時data,它代表的是:
{}
里面的所有內容。這里的資料型別是“物件” - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#examples
我去的時候:
data.attributes[0].attributes.view.data_I_want;
它是未定義的,因為……什么都沒有,因為當我這樣做時,data我得到:
{}
任何地方都沒有“屬性”......
所以我需要做一個更深層次的說:
data.data
這給了我資料的價值:
"data": [
"attributes": {
"attributes": {
"view": {
"data_I_want": "HERE"
}
}
},
"attributes": {
"attributes": {
"view": {
"data_I_want": "HERE"
}
}
},
"attributes": {
"attributes": {
"view": {
"data_I_want": "HERE"
}
}
},
],
...
資料是一個陣列。一個物件陣列,在一個物件內部——所以當我詢問 typeof 時,它代表了整個物件。
從這里開始,一旦您知道 data 是一個陣列,您就可以使用括號和 [0] 之類的數字訪問您想要的陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490012.html
標籤:javascript 打字稿 目的
