#reactjs #object #react-hooks #key
Вопрос:
Я пытаюсь захватить эти массивы из одного из открытых API НАСА -> >https://api.nasa.gov/neo/rest/v1/feed?start_date=START_DATEamp;end_date=END_DATEamp;api_key=API_KEY
У меня есть динамическая дата в параметрах, поэтому возвращаемые объекты соответствуют дате, могу ли я каким-либо образом использовать свою дату (даже если это строка) и превратить ее в значение «ключ», чтобы я мог динамически захватывать нужные мне объекты?
как => «2021-08-26» будет ссылаться { 2021-08-26: [{},{},{}…] }
Я включил свой код до сих пор с тем, что я пробовал, в настоящее время я пытаюсь просто выбрать все ключи внутри {near_earth_objects} с помощью forEach, но я все еще получаю ошибку 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]}amp;end_date=${this.state.time[1]}amp;api_key=ipAxYzaENbqRKb7GgzFPcH6QUBsHXY3QKB7uXOf5`
)
.then(response => response.json())
.then((data) => {
let asteroids = []
data.near_earth_objects.forEach((arr)=>{
asteroids.push(arr)
})
this.setState({asteroids:asteroids})
});
}
вот пример зарегистрированных данных, к которым я пытаюсь получить доступ
Комментарии:
1. Проверьте свой журнал ответов,
near_earth_objects
это не массив, поэтому его нельзя повторять.
Ответ №1:
Важно отметить, что данные возвращаются в виде объекта, значения которого являются массивами. Поскольку возвращаемые данные являются объектом, вы не можете повторять их.
Однако, чтобы получить данные, вы можете Object.values(object)
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values) , чтобы получить массив значений. Это вернет что-то похожее [ [...], [...] ]
После этого вы можете повторить эту информацию.
В конце концов, ваш код должен выглядеть примерно так:
Object.values(data.near_earth_objects).forEach((arr)=>{
asteroids.push(...arr)
})
Комментарии:
1. ах, я вижу, да, я смог использовать этот пример, чтобы заставить его работать 🙂 большое спасибо!