在对象数组中查找下一个可用的 id

mar*_*ork 3 javascript arrays object

我有一系列对象。这些对象有一个属性 id。我需要一个返回下一个可用 id 的函数(对象未使用该 id)。

array = [{ id: 1 }, { id: 2 }, { id: 5 }, { id: 3 }];
Run Code Online (Sandbox Code Playgroud)

我想要一个函数,它接受一个数组作为输入并返回一个数字(这是下一个空闲 ID)。

在示例情况中:

findFreeId(array) {
  *magic happens*
}

// result = 4
Run Code Online (Sandbox Code Playgroud)

Mor*_*lde 6

像这样的事情怎么样?

function findFreeId (array) {
  const sortedArray = array
    .slice() // Make a copy of the array.
    .sort(function (a, b) {return a.id - b.id}); // Sort it.
  let previousId = -1;
  for (let element of sortedArray) {
    if (element.id != (previousId + 1)) {
      // Found a gap.
      return previousId + 1;
    }
    previousId = element.id;
  }
  // Found no gaps.
  return previousId + 1;
}

// Tests.
let withGap = [{id: 1}, {id: 2}, {id: 5}, {id: 3}];
let noGap = [{id: 1}, {id: 2}];
let empty = [];

console.log(findFreeId(withGap)); // 4
console.log(findFreeId(noGap)); // 3
console.log(findFreeId(empty)); // 1
Run Code Online (Sandbox Code Playgroud)