验证json消息的Javascript
我正在对下面提到的传入json消息进行验证验证json消息的Javascript,javascript,Javascript,我正在对下面提到的传入json消息进行验证 "fields_group": [{ "index": 1, "value": "test" }, { "index": 2, "value": "test" }, { "index": 3, "value": "test" }, { "index": 4, "value": "test" }, { "index": 5, "value": "test" }] 验证: 1
"fields_group": [{
"index": 1,
"value": "test"
}, {
"index": 2,
"value": "test"
}, {
"index": 3,
"value": "test"
}, {
"index": 4,
"value": "test"
}, {
"index": 5,
"value": "test"
}]
验证:
1) 索引值不应重复
2) 应该只允许索引1到5。
3) 确保每个值都有索引
有人能帮助我使用Javascript以最佳方式实现上述功能吗?我尝试了2个for循环,它是O(n2),但我需要一个更快的解决方案 您可以使用every()
并添加object作为可选参数来检查重复的索引值
var obj={“字段组”:[{“索引”:1,“值”:“测试”},{“索引”:2,“值”:“测试”},{“索引”:3,“值”:“测试”},{“索引”:4,“值”:“测试”},{“索引”:5,“值”:“测试”}
var result=obj.fields\u group.every(函数(e){
如果(!此[e.index]&&e.index 0&&e.index){
此[e.索引]=真;
返回true;
}
}, {});
console.log(result)
对Array.map
、Array.一些和RegExp.test
函数使用以下方法:
var obj = {"fields_group":[{"index":1,"value":"test"},{"index":2,"value":"test"},{"index":3,"value":"test"},{"index":4,"value":"test"},{"index":5,"value":"test"}]}
var isValid = function(obj){
var indexes = obj.map(function(v){ return v.index; });
return !indexes.some(function(v, k, a){ return a.lastIndexOf(v) !== k; })
&& indexes.length === indexes.map(Boolean).length
&& /^[1-5]+$/.test(indexes.join(""));
}
console.log(isValid(obj.fields_group)); // true
!一些(函数(v,k,a){返回a.lastIndexOf(v)!==k;})
-确保所有索引都是唯一的
index.length==index.map(布尔)。length
-确保每个索引值都存在(不是空的)
/^[1-5]+$/.test(index.join(“”)
-确保索引的范围仅为1
到5
另一种方法:
function validate(fields_group) {
if (fields_group.length > 5) {
console.log("The array has more than 5 elements. The max is 5.");
return false;
}
var idxs = {};
for (var i = 0; i < fields_group.length; i++) {
var obj = fields_group[i];
if (obj.index == null || idxs[obj.index] || obj.index < 1 || obj.index > 5) {
console.log("An object does not have a valid index.");
return false;
} else {
idxs[obj.index] = true;
}
}
console.log("The feilds group is valid.");
return true;
}
功能验证(字段组){
如果(字段组长度>5){
log(“该数组有5个以上的元素,最大值为5”);
返回false;
}
var idxs={};
对于(变量i=0;i5){
log(“对象没有有效的索引”);
返回false;
}否则{
idxs[obj.index]=true;
}
}
log(“feilds组是有效的。”);
返回true;
}
我已经测量了所列答案的执行时间(使用Chrome上的performace.now()),发现这是最快的。请分享您当前的代码谢谢您的及时回复!!