Найти недостающие значения в массиве объектов - PullRequest
2 голосов
/ 24 мая 2011

У меня есть массив json, который имеет несколько пропущенных чисел и не соответствует порядку.Каков наилучший способ найти пропущенные цифры?

Моей первой мыслью было перебрать и построить новый временный массив по порядку (поэтому, если первый ключ равен 50, он переходит к arr [50]), а затем выяснить, у кого нет ключа.К сожалению, это кажется крайне неэффективным.

Обновление : Вот немного моего json:

"groups": [
    {
      "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, но длина массиваболее 2000

Ответы [ 2 ]

6 голосов
/ 24 мая 2011

Предполагая, что это объект JS, о котором вы говорите (а не JS Array, JSON Array или JSON Object), вам придется выполнить цикл дважды:

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
  }
}
0 голосов
/ 24 мая 2011

Возможно, вы могли бы создать отдельный массив с номерами в правильном порядке, затем выполнить итерацию по первому массиву и удалить его из совпадающего массива secod. В новом массиве должны быть упущены числа по порядку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...