Есть много способов сделать это - вопрос «как определить уникальность», который часто зависит от проблемной области.
Один прием, который я часто использую, если я не могу использовать Set, это сталкивать имена свойств в ненужном объекте, потому что это имеет тенденцию быть достаточно быстрым для разумных наборов размеров в JavaScript -
let seen={};
let ageList=guests.filter((obj) => {
let ret = !seen[obj.age];
seen[obj.age] = true;
return ret;
}).map((obj) => obj.age);
console.log(ageList);
Этот код устанавливает свойство в seen
с тем же именем как ваш возраст во время функции фильтра. Если он не был установлен, он возвращает true, так что эта запись будет частью фильтруемого массива. Затем я применяю функцию map, которая отображает гостевые объекты для возрастов. В результате получается массив, содержащий все уникальные возрасты.
Одной из оптимизаций может быть использование запасного массива вместо объекта для определения уникальности, зная (предполагая), что все возрасты - это числа, и они имеют тенденцию быть совсем маленький - просто измените seen={}
на seen=[]
в приведенном выше примере.
Конечно, Кнут будет указывать, что преждевременная оптимизация является root всего зла - и я хотел бы отметить, что если вы заботитесь об оптимизации, вам также нужно измерить ....