не удается получить доступ к свойству динамического объекта и сохранить состояние в react

#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. ах, я вижу, да, я смог использовать этот пример, чтобы заставить его работать 🙂 большое спасибо!