我有搜索功能,允许您搜索加密货币,我试图让它在哪里,如果搜索的参数/硬币与API的硬币或符号标题不匹配,会弹出一个警告框告诉用户再试一次。
我遇到的问题是,如果if语句为true且匹配,则会弹出else语句/警告框,无论如何。这是我在axios请求中的代码:
cryPrice(param){
axios.get(`https://api.coinmarketcap.com/v1/ticker/?limit=0`)
.then(res => {
const cryptos = res.data;
const price = []
for(let title in cryptos){
const cryptoTitle = cryptos[title].name.toUpperCase();
const cryptoSymbol = cryptos[title].symbol.toUpperCase();
if(cryptoTitle === param || cryptoSymbol === param){
price.push(cryptos[title].price_usd);
}else{
alert("Please try again");
break;
}
}
this.setState({
priceResults: price
})
})
}
答案 0 :(得分:1)
您的代码循环遍历数组中的每个项目,只要遇到不匹配的项目,它就会发出警报并中断循环
你可能想要的更像是
cryPrice(param){
axios.get(`https://api.coinmarketcap.com/v1/ticker/?limit=0`)
.then(res => {
const priceResults = res.data
.filter(item => [item.name.toUpperCase(), item.symbol.toUpperCase()].includes(param))
.map(item => item.price_usd);
if (priceResults.length) {
this.setState({priceResults});
} else {
alert("Please try again");
}
})
}
答案 1 :(得分:0)
您可以找到某些元素的匹配,但会警告其他所有元素,所有这些元素都与param不匹配。您可能只应在循环执行停止后以及如果没有匹配的货币时提醒。