在对象数组中查找缺失值

问题描述

| 我有一个json数组,其中有多个丢失的数字,并且顺序不正确。查找缺少哪些数字的最佳方法是什么? 我的第一个想法是依次遍历并按顺序构造一个新的临时数组(因此,如果第一个键为50,则转到arr [50]),然后找出其中没有键。不幸的是,这似乎效率极低。 更新: 这是我的json: \“群组\”:[     {       \“ group_id \”:\“ 1 \”,       \“ group_name \”:\“ AABYODAADAAAW6KAAA \”,     },     {       \“ group_id \”:\“ 5 \”,       \“ group_name \”:\“ AABYODAADAAAW6KAAB \”,     },     {       \“ group_id \”:\“ 2 \”,       \“ group_name \”:\“ AABYODAADAAAW6KAAC \”,     },     {       \“ group_id \”:\“ 3 \”,       \“ group_name \”:\“ AABYODAADAAAW6KAAAD \”,     },     {       \“ group_id \”:\“ 6 \”,       \“ group_name \”:\“ AABYODAADAAAW6KAAAE \”,     } ] 我正在排序
group_id
,但数组长度超过2,000。     

解决方法

假设这是您正在谈论的JS对象(而不是JS数组或JSON数组或JSON对象),则必须循环两次:
var max;
for (var key in obj) if (obj.hasOwnProperty(key) && (!max || key>max)) max = key;
for (var i=0;i<=max;++i) if (obj[i]==undefined){
  console.log(\"Missing: \"+i);
}
编辑:根据更新的示例,您似乎有一个对象数组,其键是代表整数的字符串,并且您想弄清楚键可能丢失了。这是执行此操作的代码:
var groups = myObj.groups;
var groupNames = [];
for (var i=0,len=groups.length;i<len;++i){
  groupNames[groups[i].group_id] = groups[i].group_name;
}
for (i=0,len=groupNames.length;i<len;++i){
  var name = groupNames[i];
  if (name==undefined){
    console.log(\"Oops,no name for group_id: \"+i);
  }else{
    // Do what you want
  }
}
    ,也许您可以按正确的顺序构造一个单独的数组,然后依次遍历第一个数组并从secod数组中删除匹配的数组。按顺序,新数组中剩下的应该是缺少的数字。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...