Перебор многомерного массива до тех пор, пока не будет выполнено условие

#javascript #arrays #reactjs #react-native #multidimensional-array

#javascript #массивы #reactjs #react-native #многомерный массив

Вопрос:

Я извлекаю массив объектов с интервалом в одну секунду из внешнего API и сопоставляю массив объектов в react native. Этими отображенными объектами являются : CurrencyPair , BuyingPrice и sellingPrice . Примером отображаемых объектов является

 [
  "USD_CHF",
  "0.90512",
  "0.90497",
]
 

который является одномерным массивом и представлен выше соответственно.

Во-вторых, пользователь должен выбрать валютную пару по своему выбору и ввести цену покупки и сообщение, так что, когда BuyingPrice из selectedcurrencypair (извлекается из API) равно BuyingPrice из SelectedCurrencyPair выбранного пользователем, срабатывает оповещение с сообщением с ним. Я поместил вводимые пользователем данные в виде многомерного массива и попытался выполнить цикл, проверяя, когда условие выполняется, но, похоже, оператор if в цикле не проверяется. Ниже приведен мой код:

 // Mapping array of objects 

const result = data.prices.map(value =>
  [value.instrument, value.closeoutAsk, value.closeoutBid]
);
checkCondition(...result);
 
 //function containing the comparison condition

function checkCondition({ BuyThreshold, SMSMessage }) {
  // initialize your stack
  const myStack=[];
  // create a new row
  const row = [];
  const SelectedCurrencyPair =
    currency.data.prices[clickedindex].instrument;

  row.push(SelectedCurrencyPair);
  row.push(BuyThreshold);
  row.push(SMSMessage);
  // insert the row

  myStack.push(row);

  for (let i = 0; i < myStack.length; i  ) {
    for (let j = 0; j < result.length; j  ) {

      if (result[j][0] === myStack[i][0]){
        if (result[j][1] >=  myStack[i][1])  {

          Alert.alert(myStack[i][0],"Target Price has hit : "   myStack[i][1]);
        } else {
          console.log("Price not reached");
        }
      } else{
        console.log("Wrong currency pair");
      }
    }
  }
}
checkCondition({ SelectedCurrencyPair, BuyThreshold, SMSMessage});
 
 <Modal
  visible={modalopen}
  transparent={true}
  animationType={"fade"}
>
  <View style={{flex: 1, backgroundColor: '#000000aa'}}>
    <View style={{margin: 10, backgroundColor: '#ffffff', padding: 30, flex: 1, borderRadius: 10}}>

      <Text style={{textAlign: "center", fontWeight: "bold"}}>
        Create Alert On: 
      </Text>          
      <Text style={{textAlign: "center", fontWeight: "bold"}}>
        <>
          {currency.data.prices[clickedindex].instrument}
        </>
      </Text>
  
      <View style={{ flexDirection: "row", justifyContent:"center", marginTop: 20 }}>
        <View style={styles.inputWrap}>

          <TextInput
            style={styles.textInputStyle}
            autoCorrect={false}
            value={ BuyThreshold}
            onChangeText = {(BuyThreshold) => setBuyThreshhold(BuyThreshold)}
            placeholder="BuyPrice"
            placeholderTextColor="#60605e"
            numeric
            
            clearButtonMode='always'
            keyboardType='decimal-pad'  
          /> 
          <TextInput
            style={styles.messageStyle}
            value={SMSMessage}
            onChangeText = {(SMSMessage) => setSMSMessage(SMSMessage)}
            placeholder="Message"
            clearButtonMode='always'
            
            placeholderTextColor="#60605e"
          />

        </View>
      </View>  
    
      <TouchableOpacity style={styles.button}
        onPress={() => {
          checkCondition({BuyThreshold, SMSMessage});
          // navigation.navigate("MyAlerts");

          setModalOpen(false);
          showToastWithGravityAndOffset();
        }}
      >
        <Text style={styles.buttonTitle}>OK</Text>
      </TouchableOpacity>

      </View>
        <View>
          <TouchableOpacity style={styles.button} onPress ={() => setModalOpen(false)}>
            <Text>Close</Text>
          </TouchableOpacity>
        </View>
      </View>

    </View>
  </View>
</Modal>
 

Комментарии:

1. нужна дополнительная информация. Я не знаю, почему вы вызываете checkCondition({SelectedCurrencyPair,BuyThreshold, SMSMessage}); , например, в последней строке. Пожалуйста, укажите весь ваш код, который имеет значение (вместо того, чтобы заставлять нас делать предположения)

2. checkCondition(...result) противоречит аргументам, сигнатура checkCondition которых ожидает один объект. Последняя строка последнего блока кода выполняет правильный вызов, но здесь свойства предоставляются «на ровном месте» .

3. @PeterSeliger Как я могу получить доступ к результату в checkCondition функции

4. @user23424 … пожалуйста, обратите внимание на то, как форматировать код каждый раз, когда вы редактируете любой из блоков кода. Заранее спасибо. Если код не может быть легко прочитан, количество людей, желающих оказать помощь, значительно падает.

5. @PeterSeliger Это была на самом деле проблема. Большое вам спасибо