在JavaScript中比较Array中的Object Ids

时间:2017-08-04 08:32:48

标签: javascript jquery arrays

我有一些带有一些物体的数组。每个对象都有一个id。因此,在生成新id时,我想检查具有此id的对象是否已存在。如果存在相等的id,则应生成新的。{/ p>

generateId() {
    var records = store.getRecords(); // get all the objects
    var newId = getNewId(); // calculate a new id

    if (record.id == newId) // id already exists // record.id = id of the object
        newId = generateId(); // generate a new id
    else
        return newId; // return the id
}

getNewId() {
  // generate Id...
}

那么如何在if (record.id == newId)查看我的所有记录?我使用JQuery。

3 个答案:

答案 0 :(得分:2)

你可以使用简单的for循环来实现同样性,如果你获得了大量记录,它可能效率不高。如果对象的结构对于所有记录都相同,并且假设对象值的数据类型与newId变量匹配,则此函数将用于此目的。

function DoesExist() {
   for(var i = 0; i < records.length; i++) {
     if(records[i].id == newId)
        return true;
   }

   return false;
}

答案 1 :(得分:1)

我的方法是将我的逻辑拆分为多个函数,以便我可以检查现有的id任何新函数。然后,将它包装在循环中,我可以检查生成的值,直到找到一个不在数组中的值。例如(为测试添加的方法和值):

&#13;
&#13;
function generateId() {
  var records = store.getRecords(); // get all the objects
  var newId; 
  var isUnique = false; 
  while (!isUnique) { // check if unique, repeatedly
    newId = getNewId(); // calculate a new id
    isUnique = checkId(newId);
  }
  return newId; // return the id (is unique)
}
// Check if the id is unique against existing records
function checkId(newId) {
  var records = store.getRecords();
  for (var key in records)
    if (records[key].id == newId)
      return false;
  return true;
}

// Added for testing
function getNewId() {
  return Math.round(Math.random() * 10);
}
var store = {getRecords: function() {return [{id: 1}, {id: 2}, {id: 4}, {id: 6}];}}

// Actual testing
console.log(generateId());
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这应该作为增量id生成器:​​

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;