我需要一种方法来检查我的JSON数组中是否已存在服务器。
以下是JSON数组示例:
[{
"ID": 14,
"PID": 15728,
"Online": 1,
"Servers": "staging,dev,test"
}, {
"ID": 9,
"PID": 6048,
"Online": 1,
"Servers": ""
}, {
"ID": 8,
"PID": 13060,
"Online": 1,
"Servers": "ubuntu,test"
}, {
"ID": 7,
"PID": 15440,
"Online": 1,
"Servers": "main"
}]
我需要一个JavaScript函数来处理这个问题。
示例调用可以是:
checkForDupes("staging") -> true
checkForDupes("debian") -> false
checkForDupes("ubuntu") -> true
checkForDupes("test") -> true
答案 0 :(得分:4)
您可以使用some()
和includes()
方法或数组以及split()
字符串方法:
let data = [
{"ID": 14, "PID": 15728, "Online": 1, "Servers": "staging,dev,test"},
{"ID": 9, "PID": 6048, "Online": 1, "Servers": ""},
{"ID": 8, "PID": 13060, "Online": 1, "Servers": "ubuntu,test"},
{"ID": 7, "PID": 15440, "Online": 1, "Servers": "main"}
];
function checkForDupes(d, s) {
return d.some(o => o["Servers"].split(",").includes(s));
}
console.log(checkForDupes(data, "staging"));
console.log(checkForDupes(data, "debian"));
console.log(checkForDupes(data, "ubuntu"));
console.log(checkForDupes(data, "test"));

说明强>
.some()
将对每个对象运行测试函数,如果是,则返回true
任何一个对象都通过了测试。.split()
将从"服务器"的字符串创建一个数组。由,
.includes()
将检查传递的名称在数组中的位置,或者不会根据需要返回true或false。有用的资源:
答案 1 :(得分:0)
var checkdupe = function(param) {
var count = [];
for(i=0;i<json.length;i++)
{
if(json[i].Servers.split(',').indexOf(param) != -1)
{
count.push(json[i].ID);
}
}
if(count.length>1){
return true;
}
}
您可以使用该计数数组来获取更多详细信息
indexOf 可能是最佳选择,而不是包含或包含,如果涉及到速度问题