当if语句为true时,Else语句仍在运行

时间:2018-01-25 02:30:54

标签: javascript reactjs if-statement

我有搜索功能,允许您搜索加密货币,我试图让它在哪里,如果搜索的参数/硬币与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
            })
        })
    }

2 个答案:

答案 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不匹配。您可能只应在循环执行停止后以及如果没有匹配的货币时提醒