gpt4 book ai didi

javascript - 从 Json 中获取条件值,将唯一值分组

转载 作者:行者123 更新时间:2023-11-30 19:44:16 25 4
gpt4 key购买 nike

我也是 JS 和堆栈社区的新手,我很难从本地 json 文件中获取符合条件的值。原始 json 非常大,所以这些是我的 json 的前两行;

[{
"park_name": "Acadia National Park",
"latitude": 44.35,
"longitude": -68.21,
"species_id": "ACAD-1000",
"common_names": "Moose",
"occurrence": "Present",
"abundance": "Rare",
"nativeness": "Native",
"conservation_status": null,
"location": "44.35, -68.21"
},
{
"park_name": "Acadia National Park",
"latitude": 44.35,
"longitude": -68.21,
"species_id": "ACAD-1001",
"common_names": "Northern White-Tailed Deer, Virginia Deer, White-Tailed Deer",
"occurrence": "Present",
"abundance": "Abundant",
"nativeness": "Native",
"conservation_status": null,
"location": "44.35, -68.21"
}
]

我正在尝试使用分级点创建传单 map 。 [符合条件的物种越多,点越大]。我的第一层是“MUST SEE PARKS”,我想获得 occurrence = "Present"abundance = "Rare" 的物种(这存在于不存在的其他行中此处显示)并根据它们的位置在 map 上放置点。每个公园都有许多符合这种条件的物种,例如“阿卡迪亚国家公园”中有 141 种符合这种条件,因此我只需要根据适合的物种数量对一个点进行分级。对于一个包含 141 个物种的公园,我可以获得物种但无法获取经纬度,对于其他公园也是如此,我有一堆物种但只需要一个 [lat, lon]。这是我获取条件的代码;

var visit = {};
var visit_loc = {};

for (var i = 0; i < metadata.length; i++) {
var names = metadata[i].park_name;
var abundance = metadata[i].abundance;
var occurrence = metadata[i].occurrence;
var locations = metadata[i].location;
var latitude = metadata[i].latitude;
var longitude = metadata[i].longitude;

if (occurrence === "Present" && abundance === "Rare") {
if (!visit[names] && !visit_loc[location]) {
visit[names] = 1;
visit_loc[location] = 1;
} else {
visit[names]++;
visit_loc[location]++;
}
}
}

此处的元数据是我对本地 json 的响应。我从这个公式得到的输出是这样的:

Acadia National Park: 141
Arches National Park: NaN
Badlands National Park: NaN
Big Bend National Park: NaN
Biscayne National Park: NaN
...

visit_loc 的输出是这样的:

visit_loc
{http://localhost:8000/: 10768}
http://localhost:8000/: 10768
__proto__:
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()

我不知道这是什么意思。

所以在这里,第一个公园之后的公园给了我 NaN 但在我将代码更改为:

if (occurrence === "Present" && abundance === "Rare") {
if(!visit[names]){
visit[names] = 1;
} else{
visit[names]++;
}

我得到输出,每个公园的值,输出变成这样:

Acadia National Park: 141
Arches National Park: 132
Badlands National Park: 38
Big Bend National Park: 154
Biscayne National Park: 389

这很好,我得到了我想要的值,但我无法获得符合条件的公园的纬度和经度值。

很抱歉把它放了这么久而且很复杂,这是我在这里问的第一个问题,有没有人知道如何只为每个公园获取一次纬度和经度值。谢谢。

最佳答案

您需要独立地增加visitvisit_loc。您的代码仅在尚未设置元素时将元素设置为 1。如果未设置 visit[names],但设置了 visit[locations],则代码假定两者都已初始化并尝试递增它们。这对于 visit[names] 失败,所以你在那里得到 NaN

if (occurrence === "Present" && abundance === "Rare") {
if(!visit[names]){
visit[names] = 1;
} else{
visit[names]++;
}
if (!visit_loc[locations]) {
visit_loc[locations] = 1;
} else {
visit_loc[locations]++;
}
}

关于javascript - 从 Json 中获取条件值,将唯一值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084375/

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