Bonjour je suis un débutant en javascript, je dois vérifier si la valeur de l'objet est répertoriée dans le JSON ou non. Si oui, faites autre chose, faites autre chose.

J'obtiens d'abord JSON de ipapi.co/json qui renvoie ceci par exemple

{
"ip": "103.26.208.254",
"version": "IPv4",
"city": "Jakarta",
"region": "Jakarta",
"region_code": "JK",
"country": "ID",
"country_name": "Indonesia",
"country_code": "ID",
"country_code_iso3": "IDN",
"country_capital": "Jakarta",
"country_tld": ".id",
"continent_code": "AS",
"in_eu": false,
"postal": null,
"latitude": -6.1741,
"longitude": 106.8296,
"timezone": "Asia/Jakarta",
"utc_offset": "+0700",
"country_calling_code": "+62",
"currency": "IDR",
"currency_name": "Rupiah",
"languages": "id,en,nl,jv",
"country_area": 1919440.0,
"country_population": 267663435.0,
"asn": "AS18103",
"org": "Neuviz Net"

}

Voici mon code

     $.getJSON("https://ipapi.co/json/", function (data) {
        var myIP = JSON.stringify(data);
      
    var isp = data.org.toLocaleLowerCase()
    
        var mainCat = ["republik","telekomunikasi","fastnet","indosatm2","telekomunikasi","indosat","cyberindo","biznet","xl","telematika","hutchison","smartfren","mnc","wireless indonesia","antar nusa","biznet","ezecom","win","axis","linknet-fastnet","indonesia","bali","linknet","indosat","antar nusa","indo","firstmedia","s.i","cambodia","neuviz"]
    
        var mainCat2 = JSON.stringify(mainCat);
        
        
$.each(JSON.parse(myIP) , function (key, value) {
  if(mainCat.indexOf(value.org) != -1){
   $("#ip").html("exist: " + isp);
 }
 else{
   $("#ip").html("no exist");
 };
        })
    }, "jsonp");

Ce que je veux, c'est vérifier si la valeur dans myIP contient un mot de l'exemple mainCat ("org": "Neuviz Net") et que mon mainCat a "neuviz" donc il passe le vérifier et faire quelque chose ..

Désolé mon anglais si mauvais, j'espère que vous comprenez ce que je veux dire .. Merci

0
Kuroyuki Hime 5 nov. 2020 à 12:50

2 réponses

Meilleure réponse

Vous pouvez combiner des fonctions de tableau / objet de base pour archiver votre objectif. Mais comme j'ai commenté votre question, vous devez définir des critères de filtrage stricts.

const data = {
    "ip": "103.26.208.254",
    "version": "IPv4",
    "city": "Jakarta",
    "region": "Jakarta",
    "region_code": "JK",
    "country": "ID",
    "country_name": "Indonesia",
    "country_code": "ID",
    "country_code_iso3": "IDN",
    "country_capital": "Jakarta",
    "country_tld": ".id",
    "continent_code": "AS",
    "in_eu": false,
    "postal": null,
    "latitude": -6.1741,
    "longitude": 106.8296,
    "timezone": "Asia/Jakarta",
    "utc_offset": "+0700",
    "country_calling_code": "+62",
    "currency": "IDR",
    "currency_name": "Rupiah",
    "languages": "id,en,nl,jv",
    "country_area": 1919440.0,
    "country_population": 267663435.0,
    "asn": "AS18103",
    "org": "Neuviz Net"
};

// create a regex of each filter value
const filters = [
    "republik",
    "telekomunikasi",
    "fastnet", "indosatm2",
    "telekomunikasi", "indosat",
    "cyberindo", "biznet", "xl",
    "telematika", "hutchison",
    "smartfren", "mnc",
    "wireless indonesia",
    "antar nusa", "biznet",
    "ezecom", "win", "axis",
    "linknet-fastnet", "indonesia",
    "bali", "linknet", "indosat",
    "antar nusa", "indo", "firstmedia",
    "s.i", "cambodia", "neuviz"
].map((v) => {
    return new RegExp(`${v}`, "gi");
});


// get array of values from object
// filter array based on the test criteria
let matches = Object.values(data).filter((v) => {

    // conver every value to astring
    let value = String(v).toLowerCase();

    // test each filter on value
    return filters.some((filter) => {

        // test the regular expression on the value
        return filter.test(value);

    });

});


if (matches.length > 0) {

    console.log("Filter matched!", matches);

} else {

    console.log("Filte *not* matched")

}

Le code est bien documenté, si vous ne comprenez pas un extrait / morceau, faites-le moi savoir. Si cela ne fonctionne pas comme prévu, faites-le moi savoir aussi!

Bon codage!

1
Marc 5 nov. 2020 à 10:14

Les tableaux en JavaScript ont des méthodes intégrées avec lesquelles vous pouvez effectuer des tâches spécifiques, comme some dans laquelle vous pouvez vérifier si une ou plusieurs parties des noms d'ISP sont partiellement dans la liste. Il renverra true ou false que vous pouvez utiliser pour déterminer le texte de votre élément $("#ip").

$.getJSON("https://ipapi.co/json/", function (data) {

  // Create a list of organizations.
  var organizations = ["republik","telekomunikasi","fastnet","indosatm2","telekomunikasi","indosat","cyberindo","biznet","xl","telematika","hutchison","smartfren","mnc","wireless indonesia","antar nusa","biznet","ezecom","win","axis","linknet-fastnet","indonesia","bali","linknet","indosat","antar nusa","indo","firstmedia","s.i","cambodia","neuviz"];

  // Lowercased version of the ISP.
  var isp = data.org.toLowerCase();

  // Check if the lowercased ISP occurs in any of the organizations.
  var orgExists = organizations.some(org => org.includes(isp));

  // Ternary if statement.
  // If orgExists === true, text will be "exist: " + isp.
  // Otherwise text will be "no exist".
  var text = orgExists ? "exist: " + isp : "no exist";

  // Output the text.
  $("#ip").text(text);

});
0
Emiel Zuurbier 5 nov. 2020 à 10:18