Как оставить только уникальные значения в обьекте?

Имеется обьект типа:

obj=[
 { t: 841, b: 845 },
    { t: 844, b: 846 },
    { t: 841, b: 845 },
    { t: 844, b: 846 }]

Как убрать одинаковые значения и оставить только уникальные?

obj=[ { t: 841, b: 845 },
    { t: 844, b: 846 }]

Ответы (4 шт):

Автор решения: renich
  1. Сортируем каждый объект (элемент исходного массива) по возрастанию ключей с помощью sort().
  2. Преобразовываем каждый объект в JSON.
  3. С помощью Set оставляем только уникальные значения, и затем преобразовываем в массив.
  4. Каждый элемент полученного массива преобразуем из JSON в объект.

Недостаток метода - если значениями в объектах исходного массива будут не числа, а так же массивы или объекты, то их значения должны быть предварительно отсортированы.

const obj = [{
    t: 841, b: 845
  },
  {
    t: 844, b: 846
  },
  {
    t: 841, b: 845
  },
  {
    b: 846, t: 844
  }
];
let res = 
    [...new Set(
        obj.map(item => JSON.stringify(
            Object.keys(item)
                .sort()
                .reduce((obj, value) => (obj[value] = item[value], obj), {})
        ))
    )].map(item => JSON.parse(item));

console.log(res);

→ Ссылка
Автор решения: Arturas Lapinskas

    let unicObject = [];
    obj.forEach((item) => {
    if(!unicObject.find((unic) => unic.t === item.t || unic.b === item.b)){
       unicObject.push(item);
    }
    });

→ Ссылка
Автор решения: Aziz Umarov

Вот так попробуйте:

let obj=[
 { t: 841, b: 845 },
    { t: 844, b: 846 },
    { t: 841, b: 845 },
    { t: 844, b: 846 }]

let res = obj.reduce((accumulator, currentValue) => {
  if (accumulator.every(item => !(item.t === currentValue.t && item.b === currentValue.b)))              accumulator.push(currentValue);
  return accumulator;
}, []);

console.log(res);

→ Ссылка
Автор решения: Дядя Вова

Ещё один вариант)

let obj = [
  { t: 841, b: 845 },
  { t: 844, b: 846 },
  { t: 841, b: 845 },
  { t: 844, b: 846 }
];

//- преобразуем каждый объект в строку
//- создаем Set(он оставит только уникальные значения)
//- создаём массив
//- каждый элемент(строку) - преобразуем в объект

let unique = Array.from(new Set(obj.map(item => JSON.stringify(item)))).map(item => JSON.parse(item));

console.log(unique)

→ Ссылка