我有一些带有一些物体的数组。每个对象都有一个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。
答案 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
任何新函数。然后,将它包装在循环中,我可以检查生成的值,直到找到一个不在数组中的值。例如(为测试添加的方法和值):
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;
答案 2 :(得分:1)
这应该作为增量id生成器:
{{1}}&#13;