Javascript React——循环遍历json文件,根据属性进行过滤,如果满足该条件,则获取另一个属性
我有一个Javascript React——循环遍历json文件,根据属性进行过滤,如果满足该条件,则获取另一个属性,javascript,json,reactjs,Javascript,Json,Reactjs,我有一个UScsvjson.json文件,其中包含美国各州每个县从开始日期到结束日期的新冠病毒病例。这就是它的外观(大部分) 当我说“州”时,我指的是美国的一个州,不要与美国的州混淆 我想让用户从下拉菜单中选择一个美国州,然后基于该美国州,在另一个下拉菜单中检索该美国州的所有县,如下所示: 因此,“County”下拉列表将包含Autaga、Baldwin等。本质上,一个包含json的所有Admin2属性的下拉列表,假设相应json元素的Province\u State与用户在上一个下拉列表中选
UScsvjson.json
文件,其中包含美国各州每个县从开始日期到结束日期的新冠病毒病例。这就是它的外观(大部分)
当我说“州”时,我指的是美国的一个州,不要与美国的州混淆
我想让用户从下拉菜单中选择一个美国州,然后基于该美国州,在另一个下拉菜单中检索该美国州的所有县,如下所示:
因此,“County”下拉列表将包含Autaga、Baldwin等。本质上,一个包含json的所有Admin2
属性的下拉列表,假设相应json元素的Province\u State
与用户在上一个下拉列表中选择的美国州匹配
以下是我目前为UnitedStates.js
:
我假设它源于JSON.parse
,但我不确定如何修复它,或者如何读取.JSON
文件
表单逻辑可能有点混乱。目前,我只希望能够进行json解析,并在此基础上构建React组件
非常感谢创建react应用程序包括
json加载程序
模块(以前),现在在网页>=2
中,可以导入json
您应该将导入更改为
从“/us_data/UScsvjson.json”导入数据代码>
然后将代码更改为:
const countyListForState = data
.filter((state) => (selectedState === state.Province_State))
.map((state) => state.Admin2);
您正在使用create react应用程序吗?@RobertTirta Yes这是否回答了您的问题?
import React from "react";
import * as data from "./us_data/UScsvjson.json";
const CountyList = ({ selectedState, data }) => {
const countyListForState = JSON.parse(data)
.filter((state) => (selectedState === state.Province_State))
.map((state) => state.Admin2);
/*my logic: parse the .json file. filter based on the objects with the same
Province_State property as our selected US state.
construct an array of these objects, lets call it US_Object_State_array.
then map each object in the US_Object_State_array to another new array containing only the counties,
and this array will be countyListForState.
then we will construct multiple <option> tags for every county in this array.
*/
return (
<div>
<label>county: </label>
<select>
{countyListForState.map((county) => (
<option value={county.Admin2}>{county.Admin2}</option>
))}
</select>
</div>
);
};
const StateList = () => {
/* below is the dropdown of states. this will be changed in the future to follow the same logic
as above. for right now, I just render 50 <option> elements, one for every US state*/
return (
<div>
<label>state: </label>
<select>
<option value="default" selected>
Select a state
</option>
<option value="Alabama">Alabama</option>
{/*... 48 US states later ...*/
<option value="Wyoming">Wyoming</option>
</select>
</div>
);
};
const UnitedStates = () => {
return (
<div className="dashboard">
<div className="title">COVID-19 state and county visualizer</div>
<div className="instructions">
select a state and county to see charts and data about how COVID-19 has
affected it from as early as January 2020 to present day.
</div>
<form
onSubmit={() => {
console.log("Working");
}}
>
<StateList state={"enter state"} />
<CountyList selectedState={"Alabama"} data={data} />
<button type = "submit">submit</button>
</form>
</div>
);
};
export default UnitedStates;
TypeError: Cannot convert object to primitive value
2 | import * as data from "./us_data/UScsvjson.json";
3 |
4 | const CountyList = ({ selectedState, data }) => {
> 5 | const countyListForState = JSON.parse(data)
6 | .filter((state) => selectedState === state.Province_State)
7 | .map((state) => state.Admin2);
8 |
const countyListForState = data
.filter((state) => (selectedState === state.Province_State))
.map((state) => state.Admin2);