В JavaScript Set удаляет повторные примитивы и повторные ссылки на объекты, не объединяя разные объекты с одинаковыми полями.
Функция получения массива без повторяющихся элементов
В JavaScript Set удаляет повторные примитивы и повторные ссылки на объекты, не объединяя разные объекты с одинаковыми полями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создать функцию, принимающую массив (например, inputArray) и возвращающую новый массив, содержащий только уникальные значения из исходного. При этом порядок элементов может сохраняться или изменяться, главное — отсутствие дубликатов.
def unique_values(inputArray):
# реализация функции
pass
function getUnique(arr) {
// реализация функции
}
Функция должна корректно работать с массивами любого типа данных, поддерживая как примитивы, так и объекты (при сравнении объектов использовать их ссылки).
Ответ
В JavaScript Set удаляет повторные примитивы и повторные ссылки на объекты, не объединяя разные объекты с одинаковыми полями.
function getUnique(arr) { return [...new Set(arr)]; }
В Python аналог требует определить семантику примитивов отдельно от идентичности остальных объектов:
def unique_values(inputArray):
seen = set()
result = []
for value in inputArray:
if type(value) in (str, bytes, int, float, bool, type(None)):
normalized = 'NaN' if type(value) is float and value != value else value
key = ('value', type(value), normalized)
else:
key = ('identity', id(value))
if key not in seen:
seen.add(key)
result.append(value)
return result
Здесь Python-примитивы разных типов считаются разными, а списки, словари и пользовательские объекты сравниваются по ссылке. Это явное соглашение, не встроенное поведение Python set для любых объектов.