Массив, возвращаемый как объект в React Native = не может ссылаться на элемент массива? - PullRequest
0 голосов
/ 05 ноября 2019

Я использую React Native и Open Weather Map API для создания небольшого погодного приложения. Данные, которые я извлекаю из вызова API, - это больше, чем я хочу использовать, поэтому я анализирую только те части, которые мне нужны, и сохраняю их в массиве. Затем я беру массив и устанавливаю его в объект состояния. Я могу ссылаться на объект, но вместо того, чтобы сказать, что мой массив - это массив, он говорит, что это объект, и, следовательно, не позволит мне использовать какие-либо методы для него. Как мне обойти это?

//reponseData is the data retrieved from the API call; the data retrieved is an object with arrays and objects 
within.  The forecast data for the next five days is given in 3 hour increments, so you have a 40 item array of 
data pieces.  I loop through this list of 40 items, pull out just what I need...

let forecastArray = [];

for (let i=0; i<responseData.list.length; i++) {
    let day = responseData.list[i].date
    let high = responseData.list[i].weather[0].hiTemp
    let low = responseData.list[i].weather[0].loTemp
    let condition = responseData.list[i].sys.condition

    forecastArray.push(day)
    forecastArray.push(high)
    forecastArray.push(low)
    forecastArray.push(condition)

    this.setState({
        forecastData: forecastArray
    })

Когда я регистрируюсь, я получаю массив ....

    console.warn("forecast is: ", this.state.forecastData)

OUTPUTS:  forecast is: ["11-06-2019", 52.5, 47.3, "sunny", "11-06-2019", 63.9, 39.7, "sunny", ...]

Ссылка на this.state.forecastData [2], например,однако давал мне ошибки. Итак, я проверил typeof this.state.forecast, чтобы увидеть почему, и он говорит, что массив - это Object? Мне нужно дополнительно разделить массив данных и манипулировать им. Первые несколько элементов (от прогнозирования прогнозирования [0] до прогнозирования [9]) будут относиться к прогнозируемой погоде на 11-06-2019 в 15:00, 18:00, 21:00, поэтому мне нужно вытащить эти элементы, получить самый высокий максимум и самый низкий минимум,и т.д. Я не могу этого сделать, поскольку не могу даже ссылаться на элементы в массиве.

Вещи, которые я пробовал: использовать методы Object.entries и Object.assign, но это просто разбивает элементы нанесколько массивов, причем первый элемент - это номер местоположения, а второй - содержимое элемента массива. Я пытался манипулировать массивом внутри компонента, который его использует, но он все еще является объектом, а не массивом, поэтому я не могуссылаться на отдельные элементы. Набор данных достаточно велик, и я не думаю, что было бы целесообразно вставлять каждый из 40+ элементов в их собственный ключ объекта состояния.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Спасибо, Гаурав Рой! Вы были отчасти правы. Typeof не имеет значения вообще. Но проблема была не в продолжительности моего API, а в том, что мой компонент пытался визуализировать, когда у него еще не было данных из вызова API! Я положил в условное

{this.state.forecast !== null && <Forecast forecast=this.state.forecastData />}

и получил все работает сейчас. Спасибо за быстрый ответ!

0 голосов
/ 05 ноября 2019

в массиве Javascript является подмножеством объекта, то есть имеет тот же прототип. Поэтому typeof Array будет объектом. Это не проблема. Можете ли вы обновить с ошибкой, которую вы получаете при доступе к this.state.forecastData[2], потому что я. Поверьте, это не синтаксис, а длительность вызова API.

Я бы порекомендовал при доступе к this.state.forecastData [2] сначала проверить, больше ли его длина, чем 0, таким образом вы уверены, что внутри массива есть данные.

constructor(props){
forecastData:[]
}

и когда вы используете его,

if(this.state.forecastData.length > 0){
this.state.forecastData[2]
}

Попробуйте и вернитесь с сомнениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...