如何检查JSON对象数组是否包含定义的值



你好,我是javascript新手,我需要检查JSON中是否列出了Object值。如果是,做其他事情,做另一件事。

首先,我从ipapi.co/JSON中获得JSON,它返回例如

谢谢问题解决了!

您可以组合基本的数组/对象函数来归档您的目标。但正如我对你的问题所评论的那样,你应该定义严格的过滤标准。

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")
}

代码有很好的文档记录,如果你不理解一个片段/块,请告诉我。如果它没有像预期的那样工作,也让我知道!

编码快乐!

JavaScript中的数组有一些内部构建方法,您可以使用这些方法执行特定任务,例如some方法,在该方法中,您可以检查ISP名称的一个或多个部分是否在列表中。它将返回truefalse,您可以使用它们来确定$("#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);
});

最新更新