Функция получения массива без повторяющихся элементов

В 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 для любых объектов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее