У меня есть приложение для реагирования, в котором я использую библиотеку axios, чтобы получить некоторые значения и установить их в массив объектов javascript в моем состоянии
componentDidMount(){
axios.get('http://localhost:8080/zoo/api/animals')
.then(res => this.setState({animals: res.data}))
}
Теперь я хочу проверить, содержит ли объект объект Owner внутри него, и отфильтровать его,
Сначала я попытался создать константу, а затем с помощью фильтра проверить, содержат ли они объекты, а затем установить состояние, но я не могу сохранить свои значения в локальной переменной.
componentDidMount(){
const animals= [];
axios.get('http://localhost:8080/zoo/api/animals')
.then(res => animals=res.data)
console.info(animals) // logs empty array
console.info('mounted')
}
как мне сделать так, чтобы я мог получить только животных, у которых НЕТ, внутри которых был объект-владелец?
Ах, в этом есть смысл, спасибо!
В любом случае, это не отвечает на ваш первоначальный вопрос - вы пытались отфильтровать результаты?
Вы правы @chazsolo, но был дан отличный ответ



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш массив animal пуст во втором примере, потому что axios.get асинхронный, то, что находится в вашем then, будет выполнено после получения данных, но функция тем временем будет продолжать работать.
Чтобы отфильтровать массив, просто используйте filter сразу после получения данных:
componentDidMount(){
axios.get('http://localhost:8080/zoo/api/animals')
.then(res => this.setState({animals: res.data.filter(animal => !animal.owner)}))
}
Эта функция отфильтрует каждый объект животного, не имеющий свойства owner.
Рабочий пример:
const animals = [
{
name: 'Simba',
owner: {
some: 'stuff'
}
},
{
name: 1
}, ,
{
name: 2
}, ,
{
name: 3,
owner: {
some: 'stuff'
}
},
{
name: 'Bambi'
//status: 'dead'
}
]
console.info(animals.filter(animal => animal.owner))Обновлено: ответ был изменен так, что он фильтрует только животных, у которых нет хозяина
Я хотел сделать так, чтобы у меня были только животные, у которых нет хозяина
Извините, я неправильно понял вопрос, просто поставил восклицательный знак перед условием: filter(animal => !animal.owner). Это должно сработать
animalsпуст, потому чтоaxios.getасинхронный. Вам нужно выполнить фильтр внутри обратного вызоваthen