我需要一种方法来检查我的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
您可以使用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()
将从,
分隔的“Servers”属性字符串创建一个数组.includes()
将检查传递的名称在数组中的位置,或者不适当地返回true或false。有用的资源:
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可能是最好的选择,而不是包含或包含,如果它涉及到速度很重要的点