无法访问动态对象 属性 并存储到反应中的状态
unable to access dynamic object property and store to state in react
我正在尝试从 nasa open api 之一获取这些数组 -> https://api.nasa.gov/neo/rest/v1/feed?start_date=START_DATE&end_date=END_DATE&api_key=API_KEY
我在参数中有一个动态日期,所以返回的对象与日期匹配,有什么方法可以使用我的日期(即使它是一个字符串)并将其转换为 'key' 值,所以我可以动态抓取我需要的对象吗?
like =>“2021-08-26”将引用 { 2021-08-26: [{},{},{}...] }
到目前为止,我已经将我的代码包含在我尝试过的代码中,目前我正在尝试使用 forEach select {near_earth_objects} 中的所有键,但我仍然出现错误 data.near_earth_objects.forEach is not a function
constructor(){
super();
this.state={
asteroids:[],
time: []
}
}
//grab the current time (year-month-day) and store it in the state
componentWillMount(){
var today = new Date();
var start = today.getFullYear()+'-'+0+(today.getMonth()+1)+'-'+today.getDate();
var end = today.getFullYear()+'-'+0+(today.getMonth()+1)+'-'+(today.getDate()+1);
this.setState({time: [start,end]})
}
componentDidMount(){
fetch(`https://api.nasa.gov/neo/rest/v1/feed?start_date=${this.state.time[0]}&end_date=${this.state.time[1]}&api_key=ipAxYzaENbqRKb7GgzFPcH6QUBsHXY3QKB7uXOf5`
)
.then(response => response.json())
.then((data) => {
let asteroids = []
data.near_earth_objects.forEach((arr)=>{
asteroids.push(arr)
})
this.setState({asteroids:asteroids})
});
}
这是我尝试访问的记录数据的示例
请务必注意,数据以对象形式返回,其中的值是数组。由于 return 数据是一个对象,因此您无法对其进行迭代。
但是,要获取数据,您可以 Object.values(object)
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values) 获取值数组。这将 return 看起来像 [ [...], [...] ]
之后您可以迭代此信息。
最后你的代码应该是这样的:
Object.values(data.near_earth_objects).forEach((arr)=>{
asteroids.push(...arr)
})
我正在尝试从 nasa open api 之一获取这些数组 -> https://api.nasa.gov/neo/rest/v1/feed?start_date=START_DATE&end_date=END_DATE&api_key=API_KEY
我在参数中有一个动态日期,所以返回的对象与日期匹配,有什么方法可以使用我的日期(即使它是一个字符串)并将其转换为 'key' 值,所以我可以动态抓取我需要的对象吗?
like =>“2021-08-26”将引用 { 2021-08-26: [{},{},{}...] }
到目前为止,我已经将我的代码包含在我尝试过的代码中,目前我正在尝试使用 forEach select {near_earth_objects} 中的所有键,但我仍然出现错误 data.near_earth_objects.forEach is not a function
constructor(){
super();
this.state={
asteroids:[],
time: []
}
}
//grab the current time (year-month-day) and store it in the state
componentWillMount(){
var today = new Date();
var start = today.getFullYear()+'-'+0+(today.getMonth()+1)+'-'+today.getDate();
var end = today.getFullYear()+'-'+0+(today.getMonth()+1)+'-'+(today.getDate()+1);
this.setState({time: [start,end]})
}
componentDidMount(){
fetch(`https://api.nasa.gov/neo/rest/v1/feed?start_date=${this.state.time[0]}&end_date=${this.state.time[1]}&api_key=ipAxYzaENbqRKb7GgzFPcH6QUBsHXY3QKB7uXOf5`
)
.then(response => response.json())
.then((data) => {
let asteroids = []
data.near_earth_objects.forEach((arr)=>{
asteroids.push(arr)
})
this.setState({asteroids:asteroids})
});
}
这是我尝试访问的记录数据的示例
请务必注意,数据以对象形式返回,其中的值是数组。由于 return 数据是一个对象,因此您无法对其进行迭代。
但是,要获取数据,您可以 Object.values(object)
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values) 获取值数组。这将 return 看起来像 [ [...], [...] ]
之后您可以迭代此信息。
最后你的代码应该是这样的:
Object.values(data.near_earth_objects).forEach((arr)=>{
asteroids.push(...arr)
})