验证json消息的Javascript

验证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

我正在对下面提到的传入json消息进行验证

"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()),发现这是最快的。

请分享您当前的代码谢谢您的及时回复!!