輸入數據
const json = [
{ wFrom:{fLatitude:"114.057868",fLongitude:"22.543099",fName:"深圳市"},
wTo:{tLatitude:"37.6173",tLongitude:"55.755826",tName:"Moscow"},
wValue:"31",wkey:"深圳市",wproperties:"bag" },
{ wFrom:{fLatitude:"116.681972",fLongitude:"23.354091",fName:"汕頭市"},
wTo:{tLatitude:"37.6173",tLongitude:"55.755826",tName:"Moscow"},
wValue:"24",wkey:"汕頭市",wproperties:"Baby Toys" }
];
目標結構
const geodata = {
"Moscow":[37.6173,55.755826],
"深圳市":[114.057868,22.543099],
"汕頭市":[116.681972,23.354091]
};
轉換代碼
function buildGeoData(arr) {
const geo = {};
for (const item of arr) {
const from = item.wFrom;
const to = item.wTo;
// 以 wkey / tName 為鍵,經度在前,緯度在後
geo[item.wkey] = [parseFloat(from.fLatitude), parseFloat(from.fLongitude)];
geo[to.tName] = [parseFloat(to.tLatitude), parseFloat(to.tLongitude)];
}
return geo;
}
const geodata = buildGeoData(json);
console.log(geodata);
關鍵點
- 使用
for...of 遍歷數組,解構賦值提取嵌套對象。
parseFloat 將字符串坐標轉為數值,便於地圖庫直接使用。
- 若同一地點多次出現,後者覆蓋前者;如需保留首次或合併,可添加
if (!(key in geo)) 判斷。