Получаю 8 елементов в массиве вместо 3

let set = [];

let john = {
  name: "John"
};
let pete = {
  name: "Pete"
};
let mary = {
  name: "Mary"
};

set.push(john);
set.push(pete);
set.push(mary);
set.push(john);
set.push(mary);


arr = new Map();
for (let key of set) {
  if (!arr.has(key)) {
    arr.set(key, 1);
    set.push(key);
  }
}

console.log(set);

По идее тут должны оставаться уникальные значения в map которые я добавляю в массив, в map добавляется 3 ключа но в массив уже почему-то добавляется 8 объектов

////Как я решил проблему(оказалось я затупил и запутался что и куда я добавляю)

arr = new Map();
for (let key = 0; key < set.length; key++) {
  if (!arr.has(set[key])) {
    arr.set(set[key], 1);
  } else {
    set.splice(key, 1);
    key--;
  }
}

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

Автор решения: Daniil

Я не эксперт в JavaScript, но по моему, уникальный ключ может быть только в объекте. А вот в массив, по идее, может состоять из -

[1,1,1,1,1,1,1,1,1,1]

Все, что написано выше - не точно, будьте любезны, можете меня поправить и я изменю ответ

Можете написать ф-ию, которая оставит только уникальные значение.

ВНИМАНИЕ!, функция подойдет только для не больших массивов.

function unique(arr) {
  let result = [];

  for (let str of arr) {
    if (!result.includes(str)) {
      result.push(str);
    }
  }

  return result;
}

let strings = ["кришна", "кришна", "харе", "харе",
  "харе", "харе", "кришна", "кришна", ":-O"
];

alert( unique(strings) )
→ Ссылка