Нет смысла выделять первый 
id как особый, и добавлять к нему в массив 
match другие похожие — все 
id с одинаковыми прочими значениями равноправны. Поэтому предлагаю как результат просто массивы, где собраны 
id с совпадающими свойствами.
Понадобится хэш из ключей, исключая 
id, упорядоченных по алфавиту, и значений. Этот отпечаток будет одинаков у совпадающих объектов, несмотря на разные 
id (и разный порядок ключей).
Получаем объекты 
{ id, hash }, затем составляем «словарь», где ключи – хэши, а значения – 
Set'ы с 
id, у которых оказался одинаковый хэш. Set'ы – чтобы не повторялись одинаковые 
id.
Потом остаётся из этих Set'ов сделать обычные массивы.
const arr = [
  { id: 1, we: 'cn', le: null },
  { id: 2, le: null, we: 'cn' },
  { id: 3, we: 'cn', le: 'car' },
  { id: 1, we: 'cn', le: null },
];
const dict = arr
  .map(({ id, ...obj }) => {
    const keys = Object.keys(obj).sort();
    const ordered = keys.reduce((acc, c) => {
      acc[c] = obj[c];
      return acc;
    }, {});
    return { id, hash: JSON.stringify(ordered) };
  })
  .reduce((acc, c) => {
    (acc[c.hash] ??= new Set()).add(c.id);
    return acc;
  }, {});
Object.values(dict).map(s => [...s]); // [ [1, 2], [3] ]