J'ai le tableau suivant dans mon stockage local

[  
   {  
      "customerId":"30",
      "CustomerContactId":63873
   },
   {  
      "customerId":"26506",
      "CustomerContactId":63874
   },
   {  
      "customerId":"26596",
      "CustomerContactId":63875
   },
   {  
      "customerId":"26597",
      "CustomerContactId":63876
   }
]

Nous avons la fonctionnalité de sélectionner le client dans la liste déroulante. Sur certains clients, je passe customerId à la fonction. En fonction, j'appelle api pour générer CustomerContactId pour ce customerId. je veux parcourir ce tableau et et si je veux vérifier si customerId existe dans le tableau, n'exécutez pas la génération de l'API CustomerContactId mais si customerId n'existe pas dans tout le tableau, puis créez CustomerContactId pour ce customerId. J'ai essayé la fonction de carte javascript. Ici this.state.customerContactMap = tableau de stockage local. cust_id = client sélectionné.

this.state.customerContactMap.map(item => {
   if(item.customerId === cust_id) {
     //Do not generate new CustomerContactId
   } else {
     //Generate CustomerContactId API Call
     //it should only generate CustomerContactId if cust_id is not 
     //exist in array
   }
})

Mais je suis confronté au problème qu'il crée des clients ContactEd chaque fois qu'il passe à une autre condition. J'ai besoin d'aide en logique conditionnelle.

1
Sameer Thite 17 avril 2018 à 08:28

4 réponses

Meilleure réponse

Vous pouvez utiliser Array.filter pour vérifier si l'ID client existe ou non.

var data = [{
"customerId": "30",
"CustomerContactId": 63873
}, {
"customerId": "26506",
"CustomerContactId": 63874
}, {
"customerId": "26596",
"CustomerContactId": 63875
}, {
"customerId": "26597",
"CustomerContactId": 63876
}]

function getCustomer(id){
  return data.filter(function(e){
    if(e.customerId == id){
      return true;
    }
  });
}

var custId = getCustomer("26597");

if(custId.length == 0){
  console.log("Not exists");
  //network call
}else{
  console.log("Exists");
  console.log(custId);
  //normal operations of cust id available
}
0
Atul Sharma 17 avril 2018 à 05:37

Vous devez utiliser .some() au lieu de .map().

Selon Docs:

La méthode some () teste si au moins un élément du tableau passe le test implémenté par la fonction fournie.

Par exemple:

if(arr.some(({ customerId }) => customerId === selectedId))
  console.log("Selected Found");
else
  console.log("Selected Not Found");

Démo:

let arr = [{ "customerId": "30", "CustomerContactId": 63873}, {"customerId": "26506","CustomerContactId": 63874}, {"customerId": "26596","CustomerContactId": 63875}, {"customerId": "26597","CustomerContactId": 63876}];

let selectedId = "26596";

if(arr.some(({ customerId }) => customerId === selectedId))
  console.log("Selected Found");
else
  console.log("Selected Not Found");
0
Mohammad Usman 17 avril 2018 à 05:44

Vous pouvez utiliser array#some pour vérifier si customerId est présent dans votre tableau.

const customerContactMap = [{ "customerId": "30", "CustomerContactId": 63873 }, { "customerId": "26506", "CustomerContactId": 63874 }, { "customerId": "26596", "CustomerContactId": 63875 }, { "customerId": "26597", "CustomerContactId": 63876 }],
      custId = 30;
if(customerContactMap.some(({customerId}) => customerId == custId)){
  console.log('found');
} else {
  //Execute API
}
1
Hassan Imam 17 avril 2018 à 05:32

N'ayant que cette condition:

 if(item.customerId === cust_id) {

Il semble que le type de item.customerId et cust_id ne soit pas du même type.

Essayez la conversion:

 if(item.customerId == cust_id) {

OU

 if(item.customerId === cust_id.toString()) {
0
user2575725user2575725 17 avril 2018 à 05:32