我正在做一個 Reactjs 專案——我有每個城市的城市和區域,每個城市可能有超過 200 個區域。每個區域有 3 個屬性cityId,AreaID ,isAdded,。而城市是有一個屬性cityId的。
在這里我需要將每個城市的區域存盤在一個單獨的陣列中。我該如何優化這個操作
export const getAreas = (cityID,allAreas) => {
try {
let areas = [];
if (allAreas) {
allAreas?.forEach((area) => {
if (area?.cityID === cityID) {
areas.push(area);
}
});
return areas;
}
} catch (error) {
console.log(error);
}
};
uj5u.com熱心網友回復:
const areasPerCity = new Map();
allAreas.forEach((area) => {
if (!areasPerCity.get(area.cityId)) {
areasPerCity.set(area.cityId, []);
}
areasPerCity.get(area.cityId).push(area);
});
return areasPerCity;
// here, you have a Map of a city ID => array of areas
// you could use it like `const areas = areasPerCity.get(cityId);`
一次迭代的復雜度為 O(n)。
uj5u.com熱心網友回復:
FAR 最快的 JavaScript 迭代是基本的 for 回圈,所以這樣的事情會快得多:
export const getAreas = (cityID,allAreas) => {
try {
let areas = [];
if (allAreas) {
for(let area = 0; area < allAreas.length; area ){
if (allAreas[area].cityID === cityID) {
areas.push(allAreas[area]);
}
});
return areas;
}
} catch (error) {
console.log(error);
}
};
uj5u.com熱心網友回復:
如果通過優化您的意思是想縮短您提供的代碼段,以下是您的示例的較短版本。Array.prototype.filter陣列方法在這里非常適合過濾初始陣列。
const getAreas = (cityID, allAreas) => allAreas.filter((area) => area.cityID === cityID)
盡管如果您希望優化演算法速度,這并不會快多少。如果您想改進這一點,請在此處找到答案“在 JavaScript 中回圈遍歷陣列的最快方法是什么?” 可能會幫助您加快對性能影響最大的回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475016.html
標籤:javascript 反应
下一篇:無法從回呼函式中捕獲例外
