gpt4 book ai didi

javascript - 如何将 .geojson 文件转换为带有嵌套数组的 JavaScript 对象?

转载 作者:行者123 更新时间:2023-12-03 03:32:50 24 4
gpt4 key购买 nike

这里是新手,正在努力将数据转换为复杂的结构。我有一个非常大的 .geojson 文件,具有以下简化的数据格式:

{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"group_name": "AAA",
"inst_name": "Institution1",
"holdings": "100,000+",
"all_titles": "500,000+",
"region": "New York"
},
"geometry": {
"type": "Point",
"coordinates": [
-86.1762,
39.7742
]
}
},
{
"type": "Feature",
"properties": {
"group_name": "AAA",
"inst_name_long": "Institution2",
"holdings": "100,000+",
"all_titles": "500,000+",
"region": "New York"
},
"geometry": {
"type": "Point",
"coordinates": [
-87.4106,
39.4705
]
}
},...

如何将其转换为以下格式?

[{ 
inst_name: "Institution1",
properties: {group_name: "AAA", holdings: "<100,000", all_titles: "250,000+", region: "Indiana"},
group_name: "AAA",
group_members: ["Institute1","Institute2,...],
region_name: "New York",
region_members: ["Institute1","Institute2,...],
collection_name: "100,000+",
collection_members: ["Institute1","Institute2,...],
shared_name: "500,000+",
shared_members: ["Institute1","Institute2,...]
},{
inst_name: "Institution2",
properties: {group_name: "AAA", holdings: "<100,000", all_titles: "250,000+", region: "Indiana"},
group_name: "AAA",
group_members: ["Institute1","Institute2,...],
region_name: "New York",
region_members: ["Institute1","Institute2,...],
collection_name: "100,000+",
collection_members: ["Institute1","Institute2,...],
shared_name: "500,000+",
shared_members: ["Institute1","Institute2,...]
}]

我已经能够获得使用创建的对象的第一部分inst_name:“机构2”,
属性:{},
但我一直试图在同一个函数中构建对象的其余部分,正如这个插件中所示:https://plnkr.co/edit/340oshw78kEAOdFwZpH9?p=preview

最佳答案

当您需要处理复杂数据时,将任务分解为更小的可管理 block 。

->用简单的属性构成机构数组。

->将相似的机构分组到单独的数组中。

->根据值将机构数组映射到分组数组。

fetch('./geoJsondata.json')
.then((res)=>res.json())
.then(handleResponse)
.catch((err)=>console.log(err))

function handleResponse(res) {
let propsToGroupBy = ['region', 'all_titles', 'holdings', 'group_name']
console.log(flattenJSON(res, propsToGroupBy));
return flattenJSON(res, propsToGroupBy)
}


function flattenJSON(geoJSON, propsToGroupBy) {
let { institutions, groups } =
geoJSON.features.reduce(
reduceGroupsAndGetLists,
{ institutions: [], groups: {}, groupByProps: propsToGroupBy });
let flattendJSON = institutions.map(toInstList(groups));

function reduceGroupsAndGetLists (acc, {properties}) {
let {
inst_name_long: inst_name,
group_name,
region,
holdings,
all_titles
} = properties;

acc.institutions.push({
properties,
inst_name,
group_name,
region,
holdings,
all_titles
});

acc.groupByProps.map((prop) => {
if (
(acc.groups[prop] || (acc.groups[prop] = {})))
&&
(
acc.groups[prop][properties[prop]] ||
(acc.groups[prop][properties[prop]] = [])
))
acc.groups[prop][properties[prop]].push(inst_name);
});

return acc;
}

function toInstList (groups) {
return (institution) => {
propsToGroupBy.map((prop) => {
institution[`${prop}_members`] = groups[prop][institution[prop]];
});
return institution;
}
}

return flattendJSON
}

关于javascript - 如何将 .geojson 文件转换为带有嵌套数组的 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com