我有一个由整数 ID 定义的 JS 对象列表。
objects = [{
id: 0,
type: 'null'
}, {
id: 1,
type: 'foo'
}, {
id: 2,
type: 'bar'
}];
我实现了一个从列表中删除元素的功能:
removeObject = function(o){
objects.splice(objects.indexOf(o), 1);
}
我的问题是我需要创建一个函数来在我的列表中添加一个新项目,其 id 尚未使用(例如列表中不存在的较低正整数)。
我试图做类似的事情,但是当我删除对象 0 时它不起作用(例如)。
addObject = function(type){
objects.push({
id: objects.length,
type: type
});
};
我怎样才能做到这一点 ?
编辑 1
根据您的回答,我认为在性能方面的最佳解决方案是只使用一个 topId,当我在列表中添加一个新对象时它总是递增。
但这并不能满足我的要求。实际上我认为@X-Pippes 的反应可能很好。
我应该这样做吗:
objects = [{
id: 0,
type: 'null'
}, {
id: 1,
type: 'foo'
}, {
id: 2,
type: 'bar'
}];
// Init available ids list with the default value
availableIds = [objects.length];
removeObject = function(o){
// Remove the object from the list
objects.splice(objects.indexOf(o), 1);
// Add its id to the available ids list
availableIds.push(o.id);
}
addObject = function(type){
// Get lower id available
var newId = Math.min.apply(Math,availableIds);
// Push the new object with the id retrieved
objects.push({
id: newId,
type: type
});
// Remove used id from the available ids list
availableIds.splice(availableIds.indexOf(newId), 1);
// Add a default id if available list is empty
if(availableIds.length < 1) availableIds.push(objects.length);
};