我有一個 Typescript 專案,其中有兩個物件。我正在做的是根據第一個物件的值從第二個物件獲取資料。
這是第一個物件:
let sheet = [
{
desc: "work"
},
{
desc: "serv"
}
]
這是第二個物件:
let list = [
{
"properties": {
"sheetId": 1000297558,
"title": "work",
"index": 0
}
},
{
"properties": {
"sheetId": 24134863,
"title": "serv",
"index": 1
}
]
我想要什么:獲取該物件sheetId的title屬性值等于desc第一個物件的屬性值的屬性值
這就是我所做的:
let sheetId: number
for (let getSheet of sheet ) {
for (let getList of list) {
if (getList.properties.title == getSheet.desc) {
sheetId = getList.properties.sheetId
.
.
.
}
}
}
我的問題:我迭代了兩次,每次都在一個物件上,當行程很大時,這會消耗很多,我想知道是否有另一種更有效的方法來做到這一點
uj5u.com熱心網友回復:
通過O(n)將 轉換為lista (其中是 的長度),然后在 O(1) 中從 Map 中提取 。MapsheetIdtitlenlistsheetId
基本上,地圖是持有[key, value]對的物件。您可以通過使用鍵呼叫.get()方法來獲取值。在您的情況下,為防止迭代list多種型別,我們可以對其進行一次迭代以索引sheetIdby title。
const sheet = [{"desc":"work"},{"desc":"serv"}]
const list = [{"properties":{"sheetId":1000297558,"title":"work","index":0}},{"properties":{"sheetId":24134863,"title":"serv","index":1}}]
const sheetIdByTitle = new Map(list.map(({ properties: p }) => [p.title, p.sheetId]))
console.log(sheetIdByTitle.get(sheet[0].desc))
const ids = sheet.map(o => sheetIdByTitle.get(o.desc))
console.log(ids)
uj5u.com熱心網友回復:
如果我理解正確,您的兩個陣列都具有相同的長度和相同的順序。如果是,您可以嘗試此解決方案。
let sheet = [{
desc: "work"
}, {
desc: "serv"
}];
let list = [{
"properties": {
"sheetId": 1000297558,
"title": "work",
"index": 0
}
}, {
"properties": {
"sheetId": 24134863,
"title": "serv",
"index": 1
}
}];
const res = list.map((obj, index) => obj.properties.title === sheet[index].desc ? obj.properties.sheetId : 'Not matched!');
console.log(res);
uj5u.com熱心網友回復:
您也可以嘗試這種變化。
let descToSheetIdMap = list.reduce((p, c) => {
p[c.properties.title] = c.properties.sheetId
return p
}, {});
for (let getSheet of sheet ) {
sheetId = descToSheetIdMap[getSheet.desc];
.
.
.
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433050.html
標籤:javascript 数组 json 打字稿
上一篇:打字稿定義方法引數的型別
下一篇:找不到名稱“T”打字稿
